暖色空铃 2021-11-26 15:40 采纳率: 76.9%
浏览 84
已结题

c语言简单题不知道哪里错了

img


#include<stdio.h>
#include<math.h>
#define N 1000000
int num[N]={0};
int a[N]={0};
int cnt=0,flag;
void select()
{
num[0]=num[1]=1;
for(int i=2;i<=N/2;i++)
{
if(!num[i])
for(int j=i+i;j<=N;j+=i)
{
num[j]=1;
}
}
for(int i=2;i<N;i++)
{
if(!num[i])
a[cnt++]=i;
}
}//判断素数并且单独存起来
void thing(int b)
{
if(b<10&&num[b])
{
printf("No\n");
flag=0;
}//避免漏掉1
if(flag)
{
for(int i=0;i<cnt&&a[i]<=sqrt(b);i++)
{
if(b%a[i]==0)
{
printf("No\n");
flag=0;
break;
}
}
}
}//判断是不是素数
int ws(int c)
{
int b=0;
while(c)
{
c/=10;
b++;
}
return b;
}//判断几位数
int cm(int j)
{
if(j==0)
return 1;
else
{
int sum=1;
for(int i=0;i<j;i++)
{
sum*=10;
}
return sum;
}
}//得到10的幂
int main()
{
int K;
scanf("%d",&K);
select();
while(K--)
{
int n;
scanf("%d",&n);
flag=1;
int x=n,y;
while(x)
{
y=x%10;
if(!y)
{
printf("No\n");
flag=0;
break;
}
x/=10;
}//只要有0就不行
if(flag)
{
thing(n);
if(flag)
{
for(int i=ws(n)-1;i>0;i--)
{
n%=cm(i);
thing(n);
}
}
}
if(flag)
printf("Yes\n");
}
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-12-09 09:45
    关注

    修改如下,供参考:

    #include<stdio.h>
    int isPrime(int n)
    {
        int i;
        if (n <= 3) return n > 1;
        for (i = 2; i * i <= n; i++)
            if (n % i == 0) return 0;
        return 1;
    }
    int main()
    {
        int k, n, flag = 1, flg = 1, m = 0;
        scanf("%d", &k);
        while (k--)
        {
            scanf("%d", &n);
            if (n < 2 || n > 1000000000)
                continue;
            flag = 1, flg = 1, m = n;
            while (m)
            {
                if (m % 10 == 0)
                {
                    printf("No\n");
                    flag = 0;
                    break;
                }
                flg *= 10;
                m /= 10;
            }//只要有0就不行
            if (flag)
            {
                flg /= 10;
                while (isPrime(n) && flg != 1)
                {
                    n %= flg;
                    flg /= 10;
                }
                if (isPrime(n) && flg == 1)
                    printf("Yes\n");
                else
                    printf("No\n");
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月10日
  • 已采纳回答 3月10日
  • 创建了问题 11月26日