mmhh


私信TA

用户名:uq_75393939825

访问量:1108

签 名:

等  级
排  名 3834
经  验 1764
参赛次数 3
文章发表 7
年  龄 0
在职情况 学生
学  校
专  业 计算机科学与技术

  自我简介:

解题思路:从做到右将数值依次增大来判断是否是质数,当左边较小的数值不是质数是便可提前结束后续遍历优化运行时间。

注意事项:num*10+j用于存储当前判断的数,初始num设置为0,因为开始时判断的数为个位数。

参考代码:#include<iostream>
using namespace std;
void check(int num,int N)
{
    for(int j=1;j<=9;j++)
        if((num*10+j)>1)//直接跳过首数值是1的情况,首数值是1时,必不是质数肋骨

        {
            if(num*10+j==2)
            {
                if(N==1)运行到最后一层判断,进行输出
                cout<<num*10+j<<endl;
                else//没有则继续进行
                check(num*10+j,N-1);
            }
            else {
                int jtc=1;
                for(int i=2;i<=(num*10+j)/2;i++)
                {
                    if((num*10+j)%i==0)//质数判断
                    {
                        jtc=0;
                        break;//到判定后续已经不可能是质数肋骨后提前结束计算
                    }                    
                }
                if(jtc==1)
                    if(N==1)
                    cout<<num*10+j<<endl;
                    else
                    check(num*10+j,N-1);
            }
        }
}
int main()
{
    int N;
    cin>>N;
    check(0,N);
}

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区