Я написал код для простой факторизации числа, но я не знаю, как оптимизировать его, чтобы получить лучший результат для больших цифр. У кого-нибудь есть представление о что?Как оптимизировать эту программу c, чтобы найти простую факторизацию числа
#include<stdio.h>
int prime(int p, int q, int r);
int main(){
int n,c=0;
scanf("%d",&n);
for(int j=2;j<=n;j++){
int t=0;
for(int i=1;i<=j;i++){
if(j%i==0){
t++;
}
}
if(t==2){ //check whether J is prime or not
// printf(" %d ",j);
c=prime(n,j,0); //check whether j has any factors with N
if(c!=0){
printf(" %d ",j);
printf(" %d \n",c);
}
}
}
return 0;
}
int prime(int p,int q,int r){
if(p%q==0){
r++;
prime(p/q,q,r);
}
else{
return r;
}
}
Первое, что я могу предложить вам, - это немного объяснить ваш код, прокомментировав его и немного «украсив» его. Во-вторых, не могли бы вы объяснить, что вы имеете в виду «получить лучшие результаты для больших цифр»? –
лучший результат означает сокращение времени выполнения и в отношении кода, что я сделал, я взял каждое число меньше, чем N, на которое мы должны найти факторизацию, и проверьте, является ли оно простым или нет, и если оно просто, тогда проверьте, имеет ли он факторы с заданным номером, и этот цикл продолжается до последнего номера N –
. Я могу предложить вам прочитать что-то по всей теме: факторизация Полл-Штрассена: https://en.wikipedia.org/wiki/Pollard%27s_rho_algorithm и вопрос в math.stackexchange: http://math.stackexchange.com/questions/631559/algorithms-for-finding-the-prime-factorization-of-an-integer –