QY6. 回文素数
描述
如果一个整数只能被1和自己整除,就称这个数是素数。输入描述
输入包括一行,一行中有两个整数(1 ≤ L ≤ R ≤ 1000)输出描述
输出一个整数,表示区间内回文素数个数。示例1
输入:
100 150
输出:
2
C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-06-11
#include <stdio.h> int main() { int L = 0, R = 0; int i,j,tag = 0; int num = 0; scanf("%d",&L); scanf("%d",&R); for(i = L;i<=R;i++) { tag = 0; for(j = 2;j < i;j++) { if(i % j == 0) { tag = 1; break; } } if(tag == 0) { if(i<10)num++; else if(i>=10&&i<100) { if(i/10 == i%10)num++; } else if(i>=100&&i<1000) { if(i/100 == i%10)num++; } } } if(L == 1)num--; printf("%d",num); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 248KB, 提交时间: 2019-11-15
#include<stdio.h> int main() { int L=0,R=0,count=0,ans=0; scanf("%d %d",&L,&R); for(int i=L;i<=R;i++) { int num=i,j; for(j=0;;j++)//算几位数 { num=num/10; if(num==0) { break; } } if(j==2)//三位数 { if((i/100)==(i%10))//百位与个位相同 { int count=0; for(int k=2;k<i+1;k++) { if((i%k)==0) { count++; } } if(count==1) { ans++; } } } else if(j==1)//两位数 { if((i/10)==(i%10))//十位与个位相同 { int count=0; for(int k=2;k<i+1;k++) { if((i%k)==0) { count++; } } if(count==1) { ans++; } } } else if(j==0)//一位数 { int count=0; for(int k=2;k<i+1;k++) { if((i%k)==0) { count++; } } if(count==1) { ans++; } } } printf("%d",ans); }
C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-10
#include <stdio.h> #include <stdbool.h> #include <math.h> bool ss(int num) { if(num<2) return false; int i; for(i=2;i<=sqrt(num);i++) { if(num%i==0) return false; } return true; } bool hw(int num) { int n=num,sum=0; while(n!=0) { sum=sum*10+n%10; n/=10; } if(num==sum) return true; return false; } int main() { int L,R; while(scanf("%d %d",&L,&R)!=EOF) { int i,sum=0; for(i=L;i<=R;i++) if(ss(i)&&hw(i)) sum++; printf("%d\n",sum); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-09-17
#include<stdio.h> int fact(int n) { int i; if(n==1) return 0; else { for(i=2;i<n;i++) { if(n%i==0) return 0; } return 1; } } int fact2(int n) { int sum=0,t,n_; n_=n; while (n) { sum*=10; t=n%10; sum+=t; n/=10; } if(sum==n_) return 1; else return 0; } int main() { int a,b; while (scanf("%d %d",&a,&b)!=EOF) { int i,c=0; for(i=a;i<=b;i++) { if(fact(i)==1&&fact2(i)==1) c++; } printf("%d\n",c); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2022-03-08
#include<stdio.h> #include<stdlib.h> #include<math.h> int state1(int x) { if(x==1) return 0; int i,j; for(i=2;i<x;i++) if(x%i==0) break; if(i<x) return 0; else return 1; } int state2(int x) { int num=0; int a[10000],i; i=0; while(x) { a[i++]=x%10; x/=10; } num=i; for(i=0;i<num;i++) if(a[i]!=a[num-1-i]) break; if(i<num) return 0; else return 1; } int main() { int i,j,m,n,num=0; scanf("%d %d",&m,&n); for(i=m;i<=n;i++) { if((state1(i)==1)&&(state2(i)==1)) num++; } printf("%d",num); return 0; }