gpt4 book ai didi

c++ - 质因数生成 C++

转载 作者:太空狗 更新时间:2023-10-29 23:54:08 24 4
gpt4 key购买 nike

这是我目前所拥有的:

//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;
}

我尝试采用筛分法来计算因子。所有非因子都被分配为 0。如果它们既是输入的因子又是质数,ArrayComp 会显示数字。

我遇到的问题是输出不完整,程序遇到了段错误。例如,10 的因子是 5 和 2,但它显示 100 的相同答案。

编辑:我不太确定的另一件事是数组的大小。这个程序显示 3 是 21 而不是 7 的质因数,但是如果我将大小增加 1,它会显示 3 和 5(不正确)

最佳答案

100的质因数与10的质因数相同,只是重数不同。

看来您的表示没有任何方法来存储重复因子。

关于c++ - 质因数生成 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com