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

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>

int IsPrime(int number);
int Length(int n,int k);

int main () {
    int n,k,sum=0,t;
    scanf ("%d%d",&n,&k);
    k=Length(n,k);
    while (k && n>1){
        t = IsPrime (n);
        if (t != -1){
            printf("%d",n);
            sum += t;
            if ( k!=1){
                printf("+");
            }else{
                printf("=%d",sum);
            }
        k--;
        }
        n--;
    }
    return 0 ;
}
    int Length(int n,int k){    //若n以內不夠k個素數,則按實際個數輸出
        int count=0,t;
        while(n>1){
            t = IsPrime(n);
            if ( t!=-1)
                count++;
            n--;
        }
            if(count>=k)
                return k;
            else
                return count;
    }
    int IsPrime (int number){       //判斷是否是素數
        int i;
        if ( number<=0 || number == 1)
            return -1;
        for ( i=2; i<number; i++){
            if (number % i == 0)
                return -1;
        }
        return number ;
    }