8 条题解

  • 1
    @ 2026-7-28 11:19:04
    using namespace std;
    #define int long long
    #define PII pair<int,int>
    const int N=40005;
    int n;
    int pre[N];
    int ispre[N];
    int cnt=0;
    void init()//欧拉筛
    {
        ispre[1]=1;
        ispre[0]=1;
        for(int i=2;i<=N;i++)
        {
            if(ispre[i]==0) pre[cnt++]=i;
            for(int j=0;j<cnt&&pre[j]*i<=N;j++)
            {
                ispre[pre[j]*i]=1;
                if(i%pre[j]==0) break;
            }
        }                         
    }
    void solve()
    {
        scanf("%lld",&n);
        if(ispre[n]==1)
        {
            printf("NO\n");
            return;
        }
        while(n)
        {
            if(ispre[n%10]==1)
            {
                printf("NO\n");
                return;
            }
            n/=10;
        }
        printf("YES\n");
    }
    signed main()
    {
        int t;
        init();
        scanf("%lld",&t);
        while(t--)
        {
            solve();
        }
        return 0;
    }
    
    • 1
      @ 2026-3-23 20:49:21
      #include<stdio.h>
      void cry(int n,int *home){
      	for(int i=2;i<n;i++){
      		if(n%i==0){
      			*home=1;
      			break;
      		}
      	}
      	
      	
      }
      
      int main(){
      int n;
      scanf("%d",&n);
      int ai[n];	
      	for(int i=0;i<n;i++){
      	scanf("%d",&ai[i]);
         }	
      for(int i=0;i<n;i++){
      if(ai[i]<=1){
      		printf("NO\n");
      		continue;
      }else{
      int all_num=0;	
      cry(ai[i],&all_num);	
      	        if(all_num==1){
      		    	printf("NO\n");
      	    	}else{
      			int part_num=0;
      			while(ai[i]!=0){
      				int num=ai[i]%10;
      				if(num<=1){
      				part_num=1;
      					break;
      				}
      				cry(num,&part_num);
      		        ai[i]/=10;
      		     	}
      			       if(part_num==1){
      			    	printf("NO\n");
      		        	}else{
      			     	printf("YES\n");
      		        	}
      			
      	    	}
      	
          }
      
      }return 0;
      }
      
      
      • 1
        @ 2025-11-22 18:20:54

        #include<stdio.h> int isPrime(int n); int main() { int m; scanf("%d",&m); int a[1001]; for(int i=0;i<m;i++){ scanf("%d",&a[i]); } for(int i=0;i<m;i++){ int count=0; int len=0; int temp=a[i]; while(temp!=0){ int b; b=temp%10; if(isPrime(b)1){ count++; } temp/=10; len++; } if(countlen&&isPrime(a[i])1){ printf("YES\n"); }else{ printf("NO\n"); } } return 0; } int isPrime(int n){ if(n<=1){ return 0; } for(int i=2;i*i<=n;i++){ if(n%i0){ return 0; } } return 1; }

        • 0
          @ 2025-1-2 13:24:31
          希望我的思路能让你焕然一新
          #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
            @ 2023-8-25 16:04:11

                   \ \ \ \ \ \ \ 解释见注释。

            #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
              @ 2025-1-5 13:00:28
              如果你学习的只是最基本的枚举求素数,我建议你去学习素数的筛法
              
              • -1
                @ 2023-10-14 17:12:02

                #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;
                

                }

                • -2
                  @ 2025-10-14 19:28:28

                  [#include <stdio.h> #include <stdbool.h>

                  // 判断一个数是否为质数 bool isPrime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false;

                  for (int i = 3; i * i <= n; i += 2) {
                      if (n % i == 0) return false;
                  }
                  return true;
                  

                  }

                  // 判断一个数是否为cry数 bool isCryNumber(int n) { // 首先判断数字本身是否为质数 if (!isPrime(n)) return false;

                  // 然后判断每一位数字是否为质数
                  int temp = n;
                  while (temp > 0) {
                      int digit = temp % 10;
                      // 检查每一位数字是否为质数
                      if (digit != 2 && digit != 3 && digit != 5 && digit != 7) {
                          return false;
                      }
                      temp /= 10;
                  }
                  return true;
                  

                  }

                  int main() { int T; scanf("%d", &T);

                  while (T--) {
                      int n;
                      scanf("%d", &n);
                      
                      if (isCryNumber(n)) {
                          printf("YES\n");
                      } else {
                          printf("NO\n");
                      }
                  }
                  
                  return 0;
                  

                  } ](https://)

                  • 1

                  信息

                  ID
                  64
                  时间
                  1000ms
                  内存
                  128MiB
                  难度
                  8
                  标签
                  (无)
                  递交数
                  2514
                  已通过
                  315
                  上传者