如何在c ++中找到数字的素因子?

时间:2013-04-18 17:45:02

标签: c++ primes factors

我正在尝试项目euler问题3,我没有得到理想的结果。我的逻辑:

  1. 列出数字13195的所有因子并将其保存在数组中。
  2. 检查数组中的每个数字是否为素数。
  3. 如果发现该数字是素数,请将其保存在其他数组中。
  4. 显示第二个数组的内容。
  5. 希望它只包含主要因素。
  6. 结果:第一个数组包含了预期的所有因子,第二个我认为重复第一个数组或在一些非素数中滑动,请帮忙! :)

    我的代码:

    #include <iostream>
    
    using namespace std;
    
    long int x,y=2;
    long int number=13195;
    long int f[1000000],ff[1000000];
    int st=1;
    int open=0;
    int open2=0;
    int a=0;
    bool isprime;
    
    int main()
    {
    
        for(x=1;x<=number;x++)
        {
            if(number%x==0)
            {
                f[a] = x;
                a++;
            }
        }
        while(st<=16)
        {
            while(y<f[st])
            {
                if(f[st]%y==0 && f[st]!=y)
                {
                    break;
                }
                else if(f[st]%y!=0 && f[st!=y])
                {
                    ff[open] = f[st];
                }
                y++;
            }
            open++;
            st++;
        }
        for(open2=0;open2<open;open2++)
        {
            cout<<ff[open2]<<" is a prime factor of "<<number<<"\n";
        }
        return 0;
    }
    

    使用它来寻找主要作品:

    while(st<=a){
        int k = f[open];
        for(int i=2;i<k;i++)
        {
            if(k%i==0)
            {
                isprime = false;
                break;
            }
            else if(f[open]!=0 && f[open]%i!=0 && f[open]!=i)
            {
                isprime =true;
            }
    
        }
        if(isprime==true)
        {
            ff[st] = k;
            open3++;
            isprime = false;
        }
        open++;
        st++;
        }
        cout<<"The primes of them are "<<open3<<"."<<"\n";
        cout<<"Press RETURN to show them."<<"\n";
        cin.get();
        for(open2=0;open2<=open3;open2++)
        {
            cout<<ff[open2]<<" is a prime factor of "<<number<<"."<<"\n";
        }
    

2 个答案:

答案 0 :(得分:2)

你为什么不试试

for(x=1;x<=number;x++)
{
    if(number%x==0 && isPrime(x))
    {
        f[a] = x;
        a++;
    }
}

.. ..

int isPrime(int x)
{

 for(int i=2;i<=x/2;i++)
 {
   if(x%i==0)
   return 0;
 }
 return 1;
 }

答案 1 :(得分:0)

至少:

else if(f[st]%y!=0 && f[st!=y])

应该是

else if(f[st]%y!=0 && f[st]!=y)

首先,您尝试通过f[0]始终访问f[1]f[st!=y]