把一个给出的整数写成四个素数之和。

于输入的每个数n,输出一行,包含和为n的四个素数。如果n不能写成4个素数之和,则在单独的一行输出“Impossible.”。如果有多种解法,输出任意一种即可。要代码注释讲解加结果

img

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

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img