首页 > 解决方案 > 为什么我的循环是无限的?我用91测试过

问题描述

我正在检查一个数字是否是素数,只检查从 3 到它的平方根的任何奇数是否是它的因数,一旦它有一个,那么这个数字就不是素数。我不明白为什么我的循环似乎是无限的。

我添加了 cout 行以查看问题从哪里开始,但并没有真正显示

int countFactors(int num)
{
    cout << "Inside prime\n";
    int factors = 0, x = 0, i;
    x = int(sqrt(num));
    for (i = 3; i <= x; i += 2)
    {
        cout << "Inside prime for \n";

        while(factors < 1)
        {
            cout << "Inside Prime while";
            if (num % i == 0)
            {
                factors++;
            }
        }
    }
    return factors;
}

我期望该函数接收从 19 开始的任何数字,检查它是否具有 3 的奇数因子,一旦找到该因子,循环退出,因为该数字不是奇数,因为 1 本身和一个额外的数字是因子。函数返回 0 表示素数或 1 不是素数。

标签: c++

解决方案


     int countFactors(int num)
     {
         int factors = 0, x=0, i,y=1;
        x = int(sqrt(num));
        while(y>0){
        for (i=3;i<=x;i+=2)
        {
            if (num%i==0)
                {
                    factors++;
                    y--;

                }

        }
        if(factors ==0)
           {
              y--;
           }
        }

        return factors;
    }

推荐阅读