|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
把50分拆成10个素数之和, 要求其中最大的素数尽可能大,那么这个最大的素数是几?
- // 把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;
- }
- }
- }
- }
- }
复制代码
|
|