欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1137 - 纯粹素数
类型:自定义函数
题目描述:
纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。
求出所有小于 3000 的四位的纯粹素数。
输入:
无
输出:
按从小到大的顺序输出若干个纯粹素数,每行一个。
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int p){
if(p<=3) return p>1;
if(p%2==0 || p%3==0) return false;
for(int i=5;i*i<=p;i+=6){
if(p%i==0||p%(i+2)==0) return false;
}
return true;
}
int reHigh(int r){
if(r<=9) return 0;
int res=0,mul=1;
while(r>9){
res+=r%10*mul;
r/=10;
mul*=10;
}
return res;
}
int main(){
//一、分析问题
//已知:所有小于3000的四位数。
//未知:求出所有小于 3000 的四位的纯粹素数。
//关系: 一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。
//二、定义变量(已知、未知、关系)
int t;
bool isFind;
//三、输入已知
//四、根据关系计算
for(int i=1001;i<3000;i+=2){
t=i;
isFind=true;
while(t){
if(!isPrime(t)){
isFind=false;
break;
}
t=reHigh(t);
}
//五、输出未知
if(isFind) cout<<i<<endl;
}
return 0;
}