本题要求计算并输出不超过n的最大的k个素数以及它们的和。
输入格式:
输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
输出格式:
在一行中按下列格式输出:
素数1+素数2+…+素数k=总和值
其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。
输入样例1:
1000 10
输出样例1:
997+991+983+977+971+967+953+947+941+937=9664
输入样例2:
12 6
输出样例2:
11+7+5+3+2=28
解析:素数的求解是一门学问,暂时只会这种暴力解法,大家有兴趣可以自寻搜索相关的书籍来学习。暴力解法的主要难点在于边界条件的设置,语言不好表述,大家直接看代码吧!
int main()
{
int num1, num2, sum = 0;
int arr[1000] = { 0 };
int r = 0;
printf("请输入n(10≤n≤10000)和k(1≤k≤10)的值:>");
scanf("%d %d", &num1, &num2);
//循环判断是否为素数
for (int i = 10; i < num1; i++)
{
int j = 0;
for (j = 2; j <= sqrt(i) + 1; j++)
{
if (i % j == 0)
{
break;
}
}
//将素数保存到数组中
if (j > sqrt(i) + 1)
{
arr[r] = i;
r++;
}
}
//从数组中提取想要的素数
for (int i = r-1; i >= r - num2; i--)
{
sum += arr[i];
printf("%d", arr[i]);
//设置打印‘+’的条件
if(i > r - num2)
{
printf("+");
}
}
printf("=%d\n", sum);
return 0;
}