乐乐学编程 发表于 2020-12-17 16:21:43

【奥数题】50分拆成10个素数,最大的是几

把50分拆成10个素数之和, 要求其中最大的素数尽可能大,那么这个最大的素数是几?

风过无痕1989 发表于 2020-12-17 16:34:38

// 把50分拆成10个素数之和,要求其中最大的素数尽可能大,那么这个最大的素数是几?
#include<stdio.h>
int main()
{
        int i, j, k = 0, m, n, p, s;

        for (i = 0;i <= 50;i++)   // 求素数并装入 s[] 数组
        {
                for (j = 2;j < 50;j++)
                {
                        if (i % j == 0)
                                break;
                }
                if (i == j)
                {
                        s = i;
                        k++;
                }
        }

        for (i = 0;i < 50;i++)
        {
                if (s > 32)   // 最小的素数为 2,需要9个,那么最大的数也就只能小于 32
                {
                        m = i - 1;
                        break;
                }
        }
       
        for (i = m;i > 2;i--)
        {
                for (j = 9;j >= 0;j--)
                {
                        for (k = 0;k <= 9 - j;k++)
                        {
                                if (s + j * s + k * s > 50)
                                {
                                        break;
                                }
                                // 若要求只输出最大素数的组合,则再定义一个变量 q = 1 即可
                                if (s + j * s + k * s == 50 && (j + k) == 9)
                                {
                                        for (n = 1;n <= j;n++)
                                        {
                                                printf("%d ", s);
                                        }
                                        for (p = 1;p <= k;p++)
                                        {
                                                printf("%d ", s);
                                        }
                                        printf("%d\n", s);
                                        break;
                                }
                        }
                }
        }
}
页: [1]
查看完整版本: 【奥数题】50分拆成10个素数,最大的是几