You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++筛选左移排列全为素数的算法运行到11后死循环问题

左移全素数筛选代码卡死问题排查

需求说明

给定上限m,输出所有小于m、且各位数字左移排列后的所有结果均为素数的数。代码运行到数字11后就卡住,最初猜测问题出在偶数判断逻辑上。

代码函数功能说明

代码中4个函数的功能分别为:

  • 读取输入的上限值m
  • 判断输入数字是否为素数
  • 将输入数字的各位左移一位生成新数,例如输入1234返回2341
  • 实现核心筛选逻辑

完整问题代码

#include <iostream>
#include <cmath>
using namespace std;

///In: -
///Out: m - limita
void citireDate(int &m)
{
    cout << "Limita m: "; cin >> m;
}

///In: un numar
///Out: k, care poate lua valori de 0 sau 1: 0 = prim
///                                          1 = neprim
int prim(int nr)
{
    int d = 2, k = 0;
    while(d*d<=nr&&k==0)
    {
        if(nr%d==0)
            k=1;
        d++;
    }
    return k;
}

///In: un numar
///Out: numarul format prin permutarea cifrelor numarului primit spre stanga
int permutareStanga(int nr)
{
    int nrCif = log10(nr);
    int putere = pow(10.0, nrCif);
    int primaCif = nr / putere,
        restCif  = nr % putere;
    return restCif*10 + primaCif;
}

///In: m
///Out: numerele prime permutabile, mai mici decat m;
void algoritmPermutabile(int m)
{
    for(int i = 11; i<m; i++)
    {
        int primalitate = prim(i);
        if(primalitate==0)
        {
            int p = permutareStanga(i);
            int k1 = 0;
            while(k1==0&&p!=i)
            {
                int d1 = 2, k2=0;
                while(d1*d1<=p&&k2==0)
                {
                    if(p%d1==0)
                        k2=1;
                }
                if(k2==1)
                    k1=1;
                permutareStanga(p);
            }
            if(k1==0)
                cout << i << " ";
        }
    }
}

int main()
{
    int m;
    citireDate(m);
    algoritmPermutabile(m);
    cout<<"\nProgram terminat";
    return 0;
}

问题根因

核心逻辑的内层素数判断循环中,变量d1没有写自增逻辑,导致d1始终等于2,只要当前判断的数不能被2整除,循环就会一直运行,程序陷入无限循环。
补充修复提示:代码还存在另一个隐性问题:permutareStanga(p)的返回值没有赋值给p,会导致左移操作的结果没有被保存,左移循环无法正常终止,修复时需要改成p = permutareStanga(p)


内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:18:03