|
|
发表于 2020-12-17 16:34:38
|
显示全部楼层
- // 把50分拆成10个素数之和,要求其中最大的素数尽可能大,那么这个最大的素数是几?
- #include<stdio.h>
- int main()
- {
- int i, j, k = 0, m, n, p, s[50];
- for (i = 0;i <= 50;i++) // 求素数并装入 s[] 数组
- {
- for (j = 2;j < 50;j++)
- {
- if (i % j == 0)
- break;
- }
- if (i == j)
- {
- s[k] = i;
- k++;
- }
- }
- for (i = 0;i < 50;i++)
- {
- if (s[i] > 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[i] + j * s[0] + k * s[1] > 50)
- {
- break;
- }
- // 若要求只输出最大素数的组合,则再定义一个变量 q = 1 即可
- if (s[i] + j * s[0] + k * s[1] == 50 && (j + k) == 9)
- {
- for (n = 1;n <= j;n++)
- {
- printf("%d ", s[0]);
- }
- for (p = 1;p <= k;p++)
- {
- printf("%d ", s[1]);
- }
- printf("%d\n", s[i]);
- break;
- }
- }
- }
- }
- }
复制代码 |
|