6 条题解

  • 0
    @ 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-5 13:00:28
      如果你学习的只是最基本的枚举求素数,我建议你去学习素数的筛法
      
      • 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-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;
          

          }

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