1. 程式人生 > >中M2018春C入門和進階練習集-程式設計題51 7-51 求n以內最大的k個素數以及它們的和(20 分)

中M2018春C入門和進階練習集-程式設計題51 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>
int Isprime(int a)
{ int ren=1,i;
  if(a==1) ren=0;
  else if(a!=2&&a%2==0) ren=0;
  for (i=3;i<=sqrt(a)+1;i+=2)
  {
    if(a%i==0) {ren=0;break;}
  }
  return ren;
}

int main(void)
{
  int n,num,sum=0,j,k=0,m;
  scanf("%d %d",&n,&num);
  int a[num];
  for(j=n;j>=2;j--)
  { if(Isprime(j)) {a[k]=j;k++;}
    if(k==num) break;
  }
  if(k==1) printf("%d=%d",a[0],a[0]);
  else{
     for(m=0;m<k-1;m++)
     {
        sum+=a[m];
        printf("%d+",a[m]);
     }
     printf("%d=%d",a[m],sum+a[m]);
  }
  return 0;
}