于输入的每个数n,输出一行,包含和为n的四个素数。如果n不能写成4个素数之和,则在单独的一行输出“Impossible.”。如果有多种解法,输出任意一种即可。要代码注释讲解加结果
#include<iostream>
#include<cmath>
int judge(unsigned long int x)
{
int k;
if (x == 2)
return 1;
if (x % 2 == 0)
return 0;
for (k = 2; k <= sqrt(x); k++)
{
if (x % k == 0)
return 0;
}
return 1;
}
int main()
{
int num1, num2, i;
int r1, r2;
while (scanf("%ld", &num1) && num1 != 0)
{
if (num1 >= 8)
{
if (num1 % 2 == 0)
{
num2 = num1 - 4;
}
else
{
num2 = num1 - 5;
}
for (i = 2; i <= num2; i++)
{
r1 = judge(i);
if (r1 != 0)
{
r2 = judge(num2 - i);
if (r2 != 0) break;
}
}
if (num1 % 2 == 1) printf("2 3 %ld %ld\n", i, num2 - i);
else printf("2 2 %ld %ld\n", i, num2 - i);
}
else printf("Impossible\n");
}
}
你题目的解答代码如下:
#include <stdio.h>
#include <math.h>
int judge(unsigned long int);
int main()
{
unsigned long int num, num1, i;
int re1, re2;
while (scanf("%ld", &num) && num != 0)
{
if (num >= 8)
{
if (num % 2 == 0)
{
num1 = num - 4;
}
else
{
num1 = num - 5;
}
for (i = 2; i <= num1; i++)
{
re1 = judge(i);
if (re1 != 0)
{
re2 = judge(num1 - i);
if (re2 != 0)
break;
}
}
if (num % 2 == 1)
printf("2 3 %ld %ld\n", i, num1 - i);
else
printf("2 2 %ld %ld\n", i, num1 - i);
}
else
printf("impossible\n");
}
}
int judge(unsigned long int x)
{
unsigned long int k;
if (x == 2)
return 1;
if (x % 2 == 0)
return 0;
for (k = 2; k <= sqrt(x); k++)
{
if (x % k == 0)
return 0;
}
return 1;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!