chenshihao20110204 @ 2023-08-18 10:22:21
include<bits/stdc++.h>
using namespace std;1.
bool sushu(int a);//自创函数,判断是否为素数
int weishu(int a);//判断位数
int main()
{
int a,b;//起始值和结束值
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if(i==8)
{
cout<<11<<endl;//特判输出11,因为偶数位的数只有11是回文素数
}
if(i==9999999)//题目范围最大到一亿,所以算到7位数就行了
{
break;
}
if(weishu(i)%2==0)//如果是偶数位,那么值乘以10,因为偶数位只有一个回文素数11
{
i*=10;
}
switch(weishu(i))//判断是否为回文素数
{
case 1:
{
if(sushu(i))//一位数只用判断是否为素数即可
{
cout<<i<<"\n";
}
break;
}
case 3://三位数判断百位和个位是否相等,并且判断是否为素数
{
if(i/100==i%10&&sushu(i))
{
cout<<i<<"\n";
}
break;
}
case 5://五位数判断万位与个位是否相等,并判断千位与十位是否相等,最后判断是否为素数
{
if(i/10000==i%10&&i/1000%10==i%100/10&&sushu(i))
{
cout<<i;
}
break;
}
case 7://七位数要判断百万位和个位,十万位和十位,万位和百位,以及是否为素数
{
if(i/1000000==i%10&&i/100000%10==i/100%10&&i/10000%10==i%1000/100&&sushu(i))
{
cout<<i<<endl;
}
break;
}
}
}
}
bool sushu(int a)
{
for(int i=2;i*i<=a;i++)
{
if(a%i==0)
{
return false;
}
}
return true;
}//自创函数,判断是否为素数
int weishu(int a)
{
int sum=0;
while(a>10)
{
a/=10;
sum++;
}
return sum;
}//自创函数,判断位数
有大佬的话,帮一帮吧
by Cryflmind @ 2023-08-18 10:26:45
???没这么麻烦啊
by dthythxth_Huge_Brain @ 2023-08-18 10:31:25
打表了解一下
by Cryflmind @ 2023-08-18 10:31:40
#include <bits/stdc++.h>
using namespace std;
int x, y;
int check(int k){
int a[10],i=0,j;
while (k>0){
a[i]=k%10;
k/=10;
i++;
} //a存储数字的每一位
for (j=0; j<i; j++)
if (a[j]!=a[i-j-1])
return 0;
return 1; //如果第j项和对应的项不相同,返回0,否则返回1
}
int length(int k){ //返回数字的长度
int a[10],i=0;
while (k>0){
a[i]=k%10;
k/=10;
i++;
}
return (i);
}
int prime(int k){ //判断是否是质数
int i;
for (i=3; i*i<=k; i+=2)
if (k%i==0)
return 0;
return 1;
}
int extend(int k){
int i,s=1;
for (i=0; i<k; i++)
s*=10;
return (s);
}
void pre(){
scanf("%d %d", &x, &y);
}
void work(){
for (register int i=x; i<=y; i++){
if((i%2==0&&i!=2)||(i%5==0&&i!=5))continue;
if (length(i)%2==0&&i!=11){
i=extend(length(i));
continue;
}
if (!check(i))
continue;
if (prime(i))
printf("%d\n",i);
}
}
int main(){
pre();
work();
return 0;
}
你要不读读?
by _Clown__ @ 2023-08-18 10:33:25
@chenshihao20110204 您可以写一个生成回文数的函数,枚举,同时判断是否为素数和回文数,输出即可
by _Clown__ @ 2023-08-18 10:35:10
@chenshihao20110204 参考:
int hw(int x){
int sum=0,k=x;
while(x!=0){
sum=sum*10+x%10;
x/=10;
}
if(sum==k) return 1;
return 0;
}
int main(){
int n,b;
scanf("%d%d",&n,&b);
for(int i=n;i<=b;i++){
if(i==9989900) break;
if(hw(i)&&p(i)) cout<<i<<endl;
}
return 0;
}
by gaoshengxi @ 2023-08-18 10:52:28
我啥也不干,就吃个瓜。