本题要求计算并输出不超过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
#include<stdio.h>
int main(){
int n,k;
int x;
int sum=0;
int isPrime;
int ret=0;
int tmp;
scanf("%d %d",&n,&k);
//输出k个素数,不足则按实际个数输出
for(x=n;x>1&&ret<k;x--){
//每次循环都要把isPrime重新赋为1,切记!
isPrime=1;
for(int i=2;i<x;i++){
if(x%i==0){
//常用手段,加个isPrime用来判断后续是否输出符合条件的数
isPrime=0;
//x为合数就直接结束整个for循环(里面这个for循环)
break;
}
}
if(isPrime){
printf("%d",x);
sum+=x;
//ret用来计数,判断输出到多少个素数了
ret++;
//如何去掉最后一个加号
if(ret!=k&&x!=2){
printf("+");
}
}
}
//别惦记着用 printf("\b=%d\n",sum) 来去掉最后一个'+',因为根本通不过检测。怎么丢掉最后一个'+'是考点哦!
printf("=%d\n",sum);
return 0;
}