lizhuorong @ 2023-11-18 12:10:51
请看代码:
#include<bits/stdc++.h>
using namespace std;
bool f(int n){
int x=sqrt(n);
for(int i=2;i<=x;i++){
if(n%i==0){
return false;
}
}
return true;
}
int ff(int z){
int x=0;
int a=z;
while(z!=0){
x=z%10+x*10;
z/=10;
}
if(x==a){
return true;
}
return false;
}
int main(){
long long a,b;
cin>>a>>b;
for(long long i=a;i<=b;i++){
if(ff(i)&&f(i)){
cout<<i<<endl;
}
}
}
by FreedomKing @ 2023-11-18 12:26:55
@lizhuorong 你很急吗
by lizhuorong @ 2023-11-18 12:55:49
@FreedomKing
?
by FreedomKing @ 2023-11-18 12:57:43
@lizhuorong 6分钟3个求助帖真有你的。
by lizhuorong @ 2023-11-18 12:58:55
@FreedomKing
考试题目全不会
by heyihang6666 @ 2023-11-18 13:12:21
0分的我给条建议:骗分(没准能骗个几十分)
by czh1 @ 2023-11-19 18:40:20
@lizhuorong 你需要多写一些判断条件,在运行两个函数之前就可以先快速排除这个数
eg:if(i%2)//直接砍一半
另外,我发现一个事情,位数为偶数时,一定没有回文质数 (没看题解,自己发现的)
以下为我的代码(是C的)
#include<stdio.h>
int f(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int g(int x){
int a[10],i=0;
while(x!=0){
a[i]=x%10;
x/=10;
i++;
}
i--;
for(int j=0;j<=i/2;j++){
if(a[j]!=a[i-j]){
return 0;
}
}
return 1;
}
int main(){
int a,b,c[10];
scanf("%d %d",&a,&b);
for(int i=a;i<=b;i++){
if(i%2&&(i<12||(i>100&&i<1000)||(i>10000&&i<100000)||(i>1000000&&i<10000000))){//直接在if里判断位数,不在回文函数里判断位数,更快
if(g(i)&&f(i)){
printf("%d\n",i);
}
}
}
return 0;
}
第一次帮别人,希望对你有帮助(全AC了)(这个应该不会被举报吧。。。)
by lizhuorong @ 2023-11-25 08:01:47
@czh1 谢谢了