中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;
}

猜你喜欢

转载自blog.csdn.net/sinoshen/article/details/81607952