【发布时间】:2016-09-03 16:17:26
【问题描述】:
我已经编写了一个数字的素数分解代码,但我不知道如何优化它以获得更大的数字的更好结果有人知道吗?
#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
-
我可以建议您阅读有关整个主题的内容:Polland-Strassen 分解:en.wikipedia.org/wiki/Pollard%27s_rho_algorithm 和 math.stackexchange 中的一个问题:math.stackexchange.com/questions/631559/…
-
由于您的代码分为两个函数,我建议您从优化主要函数开始。您可以阅读:en.wikipedia.org/wiki/Primality_test 和
-
谢谢@francesco-b 实际上我的主要查询是如何优化代码,因为这是我自己的代码,所以优化这段代码可能会让我更清楚,所以我发布了这个问题跨度>
标签: c++ primes prime-factoring