C++ 素因子生成C++;
以下是我到目前为止的情况:C++ 素因子生成C++;,c++,prime-factoring,C++,Prime Factoring,以下是我到目前为止的情况: //project Eular Problem 4: Prime Factors #include<iostream> #include<cmath> typedef unsigned long long int uint_64; using namespace std; void storeFactors(uint_64 factors[], uint_64 num) { for(uint_64 i=0;i*i<num;i++
//project Eular Problem 4: Prime Factors
#include<iostream>
#include<cmath>
typedef unsigned long long int uint_64;
using namespace std;
void storeFactors(uint_64 factors[], uint_64 num)
{
for(uint_64 i=0;i*i<num;i++
factors[i]=1; //assign 1 to all the values
for(uint_64 j=2; j*j<num;j++){
if(num%j!=0)
factors[j]=0; //assign 0 to non-factors
}
}
//Sieve of Eratosthenes to generate primes
void gen_primes(uint_64 arr[],uint_64 firstElement, uint_64 lastElement, uint_64 size)
{
for(uint_64 i=0;i<size;i++) //assigning 1 to all the values
arr[i]=1;
for(uint_64 i=2;i*i<=lastElement;i++){ //loop until the square-root of n
if(arr[i])
for(uint_64 j=i;j*i<=lastElement;j++) //eliminate multiples by assigning them 0
arr[j*i]=0;
if(firstElement==1)
arr[firstElement]=0;
}
}
void arrayComp(uint_64 factors[],uint_64 primeArray[], uint_64 size)
{
for(uint_64 i=2; i<=size; i++){
if(factors[i] && primeArray[i]){
cout<<i<<endl;
}
}
}
void processFactors(uint_64 num)
{
uint_64 size = sqrt(num);
uint_64 *factors = new uint_64[size];
uint_64 *primeArray = new uint_64[size];
storeFactors(factors, num);
gen_primes(primeArray, 2, num, size);
arrayComp(factors, primeArray,size);
delete [] factors;
delete [] primeArray;
}
int main()
{
uint_64 number;
cout<<"Enter a number: "<<endl;
cin>>number;
cout<<"The prime factors of "<<number<<" are: "<<endl;
processFactors(number);
return 0;
}
//项目Eular问题4:主要因素
#包括
#包括
typedef无符号长整型64;
使用名称空间std;
无效存储因子(uint_64因子[],uint_64个)
{
对于(uint_64 i=0;i*i而言,100的素因子与10的素因子相同,只是多重性不同
您的表示似乎没有任何方法存储重复因子
uint_64 size = sqrt(num);
uint_64 *factors = new uint_64[size];
uint_64 *primeArray = new uint_64[size];
错误的储备大小
例)
num=10
尺寸=3
10的系数=2,5
if(factors[i] && primeArray[i]){
cout<<i<<endl;
}
if(因子[i]&&primeArray[i]){
coutIn arrayComp它应该是i21
你只会发现3
的原因是你只测试了sqrt(21)
…对于一个数N
的每个因子m
,N/code>也是一个因子(虽然不一定是素数)。你有没有可能在内存方面有所帮助?当我输入一个工具大的数字时,我会得到所有运行时错误。有时会这样:“应用程序请求以一种不寻常的方式终止运行时”我想这是因为我试图分配一个非常大的数组?Thanks@ManishGill:您能给出一些导致崩溃的输入示例吗?600851475143@ManishGill:Ingen_primes
,for(uint_64 j=i;j*i