首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >素因子生成C++

素因子生成C++
EN

Stack Overflow用户
提问于 2011-10-17 23:54:58
回答 2查看 806关注 0票数 2

这是我到目前为止所知道的:

代码语言:javascript
复制
//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(不正确)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-17 23:58:05

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

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

票数 7
EN

Stack Overflow用户

发布于 2011-10-18 07:21:47

代码语言:javascript
复制
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

代码语言:javascript
复制
    if(factors[i] && primeArray[i]){
            cout<<i<<endl;
    }

factors5?则数组大小为3(0,1,2)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7796311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档