O código que eu desenvolvi para fatorar um número em fatores primos segue abaixo. Como disse no post anterior muitas melhorias podem ser feitas, como por exemplo usar o Teorema de Miller para acelerar a verificação da primariedade dos números.
#include <stdio.h>
int verificaPrimo(int n){
int i;
if(n < 2){
return 0;
}
else if(n == 2){
return 1;
}
else{
for(i = 2; i < n; i+=1){
if(!(n % i))
return 0;
}
return 1;
}
}
int n_esimo_primo(int n){
if( n == 1)
return 2;
if (n == 2)
return 3;
int i = 2;
while(n){
if(verificaPrimo(i)){
n--;
}
i+=1;
}
return i - 1;
}
int main(){
int n, i, d;
scanf("%d", &n);
i = 1;
while( n != 1){
d = n_esimo_primo(i);
while(!(n % d)){
printf("%d ", d);
n = n / d;
}
i++;
}
}
Nenhum comentário:
Postar um comentário