【问题标题】:How to find prime factors of a number in c++?如何在C++中找到一个数的质因数?
【发布时间】:2013-04-11 23:18:36
【问题描述】:

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

  1. 列出数字 13195 的所有因数,并将它们保存在一个数组中。
  2. 检查数组中的每个数字是否都是素数。
  3. 如果发现该数字是素数,则将其保存在另一个数组中。
  4. 显示第二个数组的内容。
  5. 希望它只包含素因数。

结果:第一个数组包含预期的所有因素,第二个我认为重复第一个数组或滑入一些非素数,请帮助! :)

我的代码:

#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";
    }

【问题讨论】:

  • 您需要在while(y&lt;f[st])之前重置y = 2
  • 只是一个风格问题:为什么你的所有变量都是全局变量??
  • 曾想过使用函数来检查数组中的素数,但放弃了这个想法,因为在 main 中也可以这样做,变量保留为全局变量。

标签: c++ primes factors


【解决方案1】:

为什么你不尝试

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

【讨论】:

  • 谢谢你!这种帮助很大...我用最终有效的代码更新了帖子...
【解决方案2】:

至少:

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

应该是

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

在第一种方式中,您尝试通过执行f[st!=y] 始终访问f[0]f[1]

【讨论】:

  • 感谢您找出缺陷,但并没有解决问题:(我认为问题更多的是逻辑缺陷?还是逻辑的实现?
  • @Rohanchrome 我的建议是您使用更具描述性的变量名称并尝试检查您的代码并找到问题。
  • @Rohanchrome 蛮力方式:写一段代码判断一个数是否为素数。找出给定数字的所有因子并将它们存储在数组中。遍历数组,只保留素数。
猜你喜欢
  • 2019-10-21
  • 1970-01-01
  • 2017-02-15
  • 2016-03-17
  • 1970-01-01
  • 2023-01-13
  • 2019-06-12
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多