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

注意事项: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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论