这是一道有趣的GESP四级水题
题目描述
如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。给定两个正整数 A, B,请求出大于等于 A、小于等于B的所有绝对素数。
输入格式
输入 11 行,包含两个正整数 𝐴A 和 𝐵B。保证 10<𝐴<𝐵<10010<A<B<100。
输出格式
若干行,每行一个绝对素数,从小到大输出。
正文温馨提示与建议
子函数可以很大提高代码可读性(我这个蒟蒻的个人建议,毕竟我只是一个初牲)
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
bool flag;
for(int i=10;i<=99;i++){
flag = true;
for(int j=2;j*j<=i;j++){
if(i%j==0){
flag = false;
break;
}
}
if(flag==false) continue;
n = i%10*10 + i/10;
for(int j=2;j*j<=n;j++){
if(n%j==0){
flag = false;
break;
}
}
if(flag==false) continue;
cout<<i<<endl;
}
return 0;
}
很显然,这道题目如果不用子函数,而且代码打得比较凌乱的话,那么可读性会非常低,所以这里给大家提供一种判断素数的模版
#include<iostream>
#include<fstream>
#include <vector>
#include <iomanip>
#include <bits/stdc++.h>
#include <math.h>
#include <algorithm>
#include <cstring>
using namespace std;
int n,flag;//定义输入数据和判断标准
//判断素数模版
int main (){
cin>>n;
for(int i=2;i<=n;i++){
flag=0;//标志清零
for(int j=2;j*j<=i/*这里用j*j<=i比j<=sqrt(i)快*/;j++){
if(i%j==0){
flag=1;
}
}
if(!flag) cout<<i<<" ";
}
return 0;
}
/*同理,我们在编写的时候,尽量把可以简化的部分写成子函数,以下是一个bool型的子函数
bool zs(int i){
for(int j=2;j*j<=i;j++){
if(i%j==0){
return 0;
}
}
return 1;
}*/
在编写代码的时候,大家可以根据需要选择是用int型子函数还是型子函数
所以用子函数是最好的
这里配上我的AC代码
#include<iostream>
#include<fstream>
#include <vector>
#include <iomanip>
#include <bits/stdc++.h>
#include <math.h>
#include <algorithm>
#include <cstring>
using namespace std;
bool zs(int i){
for(int j=2;j*j<=i;j++){
if(i%j==0){
return 0;
}
}
return 1;
}
int a,b;
int main (){
cin>>a>>b;
int x=0;
for(int i=a;i<=b;i++){
x=i/10+i%10*10;
if(zs(x)==1&&zs(i)==1){
cout<<i<<endl;
}
}
return 0;
}
我用了一个bool型子函数来判断素数
最后自豪的配上我的AC记录
AC记录,用户:SuperJARhttps://www.luogu.com.cn/record/159023810
OK,就这样了,以后课余时间我会继续写点随笔滴
最后告诉大家,我来自福州,是一名福州金山中学23级初一十班的一名蒟蒻(季傲然)
最后发起一个投票,如果有福州的小伙伴或者认识我的,请投上你宝贵的一票