4 条题解
-
0
希望我的思路能让你焕然一新 #include<iostream> #include<cstring> using namespace std; const int N=7; int f[N]; bool is_pre(int sum) { if(sum<2) { return false; } for(int i=2;i<=sum/i;i++) { if(sum%i==0) { return false; } } return true; } int main() { int n,m,q=0,l=0,o=0; cin>>m; while(m--) { l=0; q=0; o=0; int t; memset(f,0,sizeof(f)); cin>>n; t=n; while(t>0) { t/=10; o++; } if(n==0||n==1) { cout<<"NO"<<endl; continue; } if(is_pre(n)) { while(n>0) { int t=n%10; if(is_pre(t)) { f[++q]=1; } n/=10; } } f[5]=f[5]+f[4]+f[3]+f[2]+f[1]; if(f[5]==o) { l=1; } if(l==1) { cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } return 0; } 来看看我的题解吧,需要注意的是不能在第二个while循环里面进行o++,原因你去拿含1的数试试就出来了,所以需要把o来进行求位数👀️
-
0
#include <stdio.h> #include <math.h> int main() { int n,j; scanf("%d",&n); while (n>0) { int cont=1; int i; scanf("%d",&i); int k=sqrt(i); for (j=2;j<=k;j++) { if(i%j0) { cont=0; break; } } if(cont1&&i!=1) { int mask=1; int m=i; while(m>=10) { mask++; m/=10; } int iff=0; while(i>0) { int flag=1; int f=i%10; int s=sqrt(f); for (j=2;j<=s;j++) { if(f%j0) { flag=0; break; } } if(flag1&&f!=1) { iff++; } i/=10; } if(iff==mask) { printf("YES\n"); } else { printf("NO\n"); } } else { printf("NO\n"); }
n--; } return 0;
}
-
-1
解释见注释。
#include <iostream> const int MAXN = 40010; bool isPrime[MAXN]; int fillIsPrime(){//筛法判断素数 isPrime[0] = false; isPrime[1] = false; for(int i = 2; i <= MAXN; i++){ isPrime[i] = true; } for(int i = 2; i <= MAXN; i++){ if(isPrime[i]){ for(int j = 2 * i; j <= MAXN; j += i){ isPrime[j] = false; } } } return 0; } int main(){ int n, x, r; fillIsPrime(); scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &x); if(isPrime[x]){ //当x本身是素数时进入while循环 r = x % 10; while(isPrime[r]){ //检测每一位的数字是否是素数 x /= 10; r = x % 10; } if((!r) && (!(x / 10))){ //当r=0时有两种情况: //①每一位的数字都检测完毕,该数字是cry数; //②检测的数有某一位是0,此时由于该0必不在最高位,故x/10一定不是0。 printf("YES\n"); continue; } } printf("NO\n"); } return 0; }
- 1
信息
- ID
- 64
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 2124
- 已通过
- 249
- 上传者