为什么这一个数就是不对啊

题目
素数又称质数。指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。我们定义:如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。现在给你一个正整数,你需要写个程序判断一下这个数按照上面的定义是不是一个完美的素数。

Input
输入包含多组测试数据。 每组测试数据只包含一个正整数 n (1 < n <= 10^6)。

Output
对于每组测试数据,如果 n 是完美的素数,输出“YES”,否则输出“NO”(输出均不含引号)。

Examples
input复制
11
13
output复制
YES
NO
#include<stdio.h>
#include<math.h>
int main(){
int y,z,sum=0,i=2,w=2,v=2,a;
int x;
while(scanf("%d",&x)!=EOF){

a=x;
for(i=2;i<a;i++){
    if(a%i==0){
        w=1;
    }
} 
while(x>0)              //循环条件保持n不为零即可,也可以用n!=0或者括号内一个n就完事了
   {  sum+=x%10;         //累计各个位数
      x/=10;   }
for(i=2;i<sum;i++){
    if(sum%i==0){
        v=1;
    }
}if(sum==2){
    v=2;
}

if(w==2&&v==2){
    printf("YES\n");
}else{
    printf("NO\n");
}

}return 0;
}

img

题主的代码修改如下,供参考:

#include<stdio.h>
#include<math.h>
int main(){
    int y,z,sum=0,i=2,w=2,v=2,a;
    int x;
    while(scanf("%d",&x)!=EOF){
         a=x; sum=0;w=2;v=2;//修改
         for(i=2;i<a;i++){
             if(a%i==0){
                w = 1;
             }
         }
         while(x>0)              //循环条件保持n不为零即可,也可以用n!=0或者括号内一个n就完事了
         {
             sum+=x%10;         //累计各个位数
             x/=10;
         }
         for(i=2;i<sum;i++){
            if(sum%i==0){
               v = 1;
            }
         }
         if(sum == 2){
            v = 2;
         }
         if(w == 2 && v == 2){
            printf("YES\n");
         }else{
            printf("NO\n");
         }
    }
    return 0;
}

直接上代码?至少把问题描述清楚呀

问题确实不太清楚。不看w的用法有点问题,循环里面只有w=1 没有2的地方