题目描述
找出正整数 M 和 N 之间(N 不小于 M)的所有真素数。
真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为真素数。
例如,11,13 均为真素数,因为 11 的反序还是为 11,13 的反序为 31 也为素数。
输入格式
输入两个数 M 和 N,空格间隔。
输出格式
按从小到大输出 M 和 N 之间(包括 M 和 N)的真素数,逗号间隔。如果之间没有真素数,则输出 No
。
#include<stdio.h>
int prime(int n)
{
if(n==1)
return 0;
int i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int rever(int n)
{
int x[10],i=0,j,N=0;
while(n!=0)
{
x[i]=n%10;
n/=10;
i++;
}
for(j=0;j<i;j++)
{
N+=x[j];
N*=10;
}
N/=10;
if(prime(N))
return 1;
return 0;
}
main()
{
int m,n,i,flag=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
if(prime(i)&&rever(i))
{
if(flag)
printf(",");
printf("%d",i);
flag=1;
}
}
if(flag==0)
printf("No");
}
#include<bits/stdc++.h>
using namespace std;
int prime(int n)
{
if(n==1)
return 0;
int i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
main()
{
int m,n,i,j,flag=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
string t = to_string(i);//将i转化为字符串
reverse(t.begin(), t.end());//翻转
j = stoi(t);//将字符串转化为数字
if(prime(i)&&prime(j))
{
if(flag)
printf(",");
printf("%d",i);
flag=1;
}
}
if(flag==0)
printf("No");
}