【发布时间】:2016-09-05 22:17:39
【问题描述】:
我刚刚写了以下内容,以利用筛子找到大于 2 的某个自然数的最大素数。
该程序针对较小的测试值构建、运行和工作,但对于大于 1000000 的值只会崩溃。
我自己写了这个——并且相信它可能会非常低效——在找出筛子的用途之后。
您能否提出改进建议?
谢谢。
//LARGEST PRIME FACTOR w/SIEVE OF ERATHOSTHENES
#include <iostream>
#include <math.h>
using namespace std;
unsigned long long int numberToCheck=0;
void sieve(unsigned long long int checkNumber)
{
checkNumber=numberToCheck;
unsigned long long int root=(int)(sqrt(checkNumber));
unsigned long long int primeFlagger[checkNumber+1];
for(unsigned long long int i=0;i<=checkNumber;i++)
{
primeFlagger[i]=1;
}
primeFlagger[0]=0;
primeFlagger[1]=0;
for(unsigned long long int j=2;j<=checkNumber;j++)
{
if(primeFlagger[j]==1)
{
for(unsigned long long int k=2;(k*j)<=checkNumber;k++)
{
primeFlagger[j*k]=0;
}
}
}
for(unsigned long long int l=checkNumber;l>=0;l--)
{
if(primeFlagger[l]==1)
{
if(checkNumber%l==0)
{
cout<<l<<" is the largest prime factor"<<endl;
break;
}
}
}
}
int main()
{
cout<<"Largest prime factor less then or equal to? "<<endl;
cin>>numberToCheck;
cout<<endl;
cout<<"Retrieving largest prime factor..."<<endl;
sieve(numberToCheck);
return 0;
}
【问题讨论】:
-
埃拉托色尼筛法非常适合在某个连续范围内生成中等大小的素数表。虽然它可以用于试除法(找到给定输入的最小素因数),但它有点不必要的矫枉过正。您能否更深入地解释一下您的计划目标?
-
应该生成大于2的某个自然数的最大素因数。
标签: c++ performance numbers prime-factoring