赞
踩
本题要求计算并输出不超过n的最大的k个素数以及它们的和。
输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
在一行中按下列格式输出:
素数1+素数2+…+素数k=总和值
其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。
1000 10
997+991+983+977+971+967+953+947+941+937=9664
12 6
11+7+5+3+2=28
int arr[20]; //利用数组来储存K个素数
- for(j=n;j>1;j--) //其中素数按递减顺序输出,所以倒着循环寻找k个素数
- {
- for(i=2;i<=sqrt(j);i++)
- { //确定j是否为素数
- if(j%i==0)
- break;
- }
- if(m>=k)//根据题意存k个素数,如果存够了,跳出循环
- break;
- if(i>sqrt(j))//如果j为素数,将其存入数组
- {
- arr[m]=j;
- m++; //m=0开始计数,存一个素数,m+1,(直到m=k-1)
- }
- }
- for(t=0;t<=m-1;t++)
- { //把存在数组中的k个素数想办法拿出来
- sum+=arr[t];//数组中的k个素数求和
- if(t<m-1)
- printf("%d+",arr[t]);
- else
- printf("%d",arr[t]);
- }
-
- printf("=%d",sum);
- #include<stdio.h>
- int main()
- {
- int n,k,i,j;
- int m=0,sum=0,t=0;
- int arr[20]; //利用数组来储存K个素数
- scanf("%d%d",&n,&k);
- for(j=n;j>1;j--) //其中素数按递减顺序输出,所以倒着循环寻找k个素数
- {
- for(i=2;i<=sqrt(j);i++)
- { //确定j是否为素数
- if(j%i==0)
- break;
- }
- if(m>=k)//根据题意存k个素数,如果存够了,跳出循环
- break;
- if(i>sqrt(j))//如果j为素数,将其存入数组
- {
- arr[m]=j;
- m++; //m=0开始计数,存一个素数,m+1,(直到m=k-1)
- }
- }
- for(t=0;t<=m-1;t++)
- { //把存在数组中的k个素数想办法拿出来
- sum+=arr[t];//数组中的k个素数求和
- if(t<m-1)
- printf("%d+",arr[t]);
- else
- printf("%d",arr[t]);
- }
-
- printf("=%d",sum);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。