Description
素数又称质数。指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。我们定义:如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。现在给你一个正整数,你需要写个程序判断一下这个数按照上面的定义是不是一个完美的素数。
Input
输入包含多组测试数据。
每组测试数据只包含一个正整数 n (1 < n <= 10^6)。
Output
对于每组测试数据,如果 n 是完美的素数,输出“YES”,否则输出“NO”(输出均不含引号)。
Sample
Input
11
13
Output
YES
NO
再本题前如果学习了函数,便可以定义一个判断素数的函数,将让程序更清晰;
方法一:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,n,i,j,sum=0;
while(scanf("%d",&n)!=EOF)
{
for(i=2; i<n; i++)
{
if(n%i==0)
break;
}
if(n==i)
{
sum=0;
for(;n>0;)
{
a=n%10;
sum=sum+a;
n=n/10;
}
for(j=2; j<sum; j++)
{
if(sum%j==0)
break;
}
if(j==sum)
printf("YES\n");
else
printf("NO\n");
}
else
printf("NO\n");
}
return 0;
}
方法二:
#include <stdio.h>
#include <stdlib.h>
int f(int n)//判断素数的函数;
{
int i;
for(i=2; i<n; i++)
{
if(n%i==0)
break;
}
if(i<n)
return 0;
else return 1;
}
int main()
{
int n,sum;
while(~scanf("%d",&n))
{
if(f(n))//如果n为素数则继续执行下面语句;
{
int sum = 0,a;
for(;n>0;)//求各位数和;
{
a=n%10;
sum=sum+a;
n=n/10;
}
if(f(sum))//如果各位数之和也为素数;
printf("YES\n");
else printf("NO\n");
}
else printf("NO\n");
}
return 0;
}