题目(Description):
输入一个大于等于6的正偶数,将其拆分成两个素数(质数)的和,比如12=5+7, 20=3+17。
素数(质数):除了1和本身外没有其他因子的数,比如2、3、5、7、11、13 … 一般规定1不是素数。
要求:编写一个求素数的函数。
输入(Input ):
一个大于等于6的正偶数
输出(Output):
(1)如果输入的是奇数或小于6的偶数,则输出"Input an even num (>=6)"(首字母大写,单词间一个空格,括号内无空格,没有句号".")
(2)如果是合法输入(一个大于等于6的正偶数),则输出两个素数且满足它们的和是输入的偶数
要求:小素数在前,大素数在后;且是所有可能拆分中,有最小素数的那一组。
比如:20=3+17 且 20=7+13,则输出3+17(中间没有空格),因为这一组有满足条件的最小素数
提示(Hint):
分别编写 prime 和 main 函数,用 prime 函数实现素数判断。
int prime(int y)
{
如果y是素数则返回1
否则返回0
}
示例1(Sample):
输入(Input):
20
输出(Output):
3+17
示例2(Sample):
输入(Input):
33
输出(Output):
Input an even num (>=6)
#include <stdio.h>
#include <math.h>
int IsPrime(int n)
{
int i;
if (n <= 1)
return 0;
for (i = 2; i <= (int)sqrt(n); i++)
if (n % i == 0 && n != 2)
return 0;
return 1;
}
int main()
{
int n,i;
scanf("%d", &n);
if (n % 2 != 0 || n < 6)
printf("Input an even num (>=6)");
else {
for (i = 1; i <= n; i++)
if (IsPrime(i) && IsPrime(n - i))
break;
printf("%d+%d", i, n - i);
}
return 0;
}