解题思路:从做到右将数值依次增大来判断是否是质数,当左边较小的数值不是质数是便可提前结束后续遍历优化运行时间。
注意事项: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 人评分
十->二进制转换 (C++代码)(零和负数需要特殊处理)浏览:1046 |
C二级辅导-阶乘数列 (C语言代码)浏览:618 |
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:834 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:540 |
淘淘的名单 (C语言代码)答案错误???浏览:595 |
【偶数求和】 (C语言代码)浏览:652 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:979 |
WU-格式化数据输出 (C语言代码)浏览:1757 |
WU-链表数据求和操作 (C++代码)浏览:1327 |
WU-小九九 (C++代码)浏览:1685 |