7 条题解

  • 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
                标签
                (无)
                递交数
                2500
                已通过
                309
                上传者