69,381
社区成员
发帖
与我相关
我的任务
分享
const int MP=1e6;
bool vis[MP];
void sieve()
{
for(int i=2,ie=sqrt(MP+0.5);i<=ie;i++)if(!vis[i]){
for(long long j=(long long)i*i;j<=MP;j+=i) vis[j]=1;
}
}
int rev(int n,int r=0){
return n ? rev(n/10,r*10+n%10) : r;
}
int count(int m,int n){
int ans=0;
for(int i=m;i<=n;i++){
if(!vis[i]&&!vis[rev[i]]) ++ans;
}
return ans;
}
//求m,n之间的绝对素数(包括m,n)
#include <stdio.h>
int prime(int number); //判断一个数是否为素数,1为真0为假
int num_back(int number); //取一个数的反数
void fun(int m, int n); //输出两个数之间的绝对素数
int main(void)
{
//没有做输入确认
int m,n;
scanf("%d",&m);
getchar();//接受两数的间隔符
scanf("%d", &n);
fun(m, n);
return 0;
}
void fun(int m, int n) //输出两个数之间的绝对素数
{
while (m <= n)
{
if (prime(m))//判断是否为素数
if (prime(num_back(m)))//取反后再判断是否为素数
printf("%d\n", m);//都成立即为绝对素数,输出
m++;
}
}
int num_back(int number) //取一个数的反数
{
int a = 0, b = 0;
while (number)
{
a = number % 10;//取number的最后一位
b = b * 10 + a; //增加权重
number = number / 10; //去掉number的最后一位
}
return b;
}
int prime(int number) //判断一个数是否为素数,1为真0为假
{
int bool_i = 0;
if (number < 2) //小于2返回假
return 0;
else if (number == 2) //等于2直接返回真
return 1;
for (int i = 3; i < number; i++) //
if ((number%i) == 0) //如果能被3到number之间的数整除就返回假
{
bool_i = 0;
break;
}
else
bool_i = 1;
return bool_i;
}