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");
}
}

修改如下,供参考:

#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");
        }
    }
}

你刚输入个k就调用select,这都什么逻辑,乱糟糟的
还有,已经实现过的函数,不调用,一遍一遍复制粘贴,真是又臭又长