1. 程式人生 > >7-51 求n以內最大的k個素數以及它們的和(20 分)

7-51 求n以內最大的k個素數以及它們的和(20 分)

題目:

本題要求計算並輸出不超過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>
#include <math.h>
#define N 10 int isPrime(int p); int main(){ int n, k, i, count, sum=0; int maxPrimes[N]; scanf("%d%d", &n, &k); i = n; count = 0; while(i>0){ if(count<k){ if(isPrime(i)){ maxPrimes[count] = i; sum += i; count
++; } } else{ break; } i--; } for(i=0; i<count-1; i++){ printf("%d+", maxPrimes[i]); } printf("%d=%d", maxPrimes[count-1], sum); return 0; } int isPrime(int p){ int isPrime=1; int i; if(p<2){ isPrime = 0
; } else{ for(i=2; i<=(int)sqrt(p); i++){ /*若p為合數,則必有不大於sqrt(p)的因子*/ if(p%i == 0){ isPrime = 0; break; } } } return isPrime; }