错误的代码
//求计算并输出不超过n的最大的k个素数以及它们的和。
//输出素数1+素数2+…+素数k=总和值
//其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。
#include<stdio.h>
#include<math.h>
int is_prime(int );
int main()
{
int n,k,i=0,j,sum=0;
scanf("%d %d",&n,&k);//输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
int a[k];
for(;n>0&&i<=k;n--)//数组下标从零开始递增,a[i]多储存了一个数
{
if(is_prime(n))
{
a[i]=n;
i++;
sum=sum+n;
}
}
for(j=0;j<i;j++)
{
if(j<(i-1))
printf("%d+",a[j]);
else
printf("%d=%d",a[j],sum);
}
return 0;
}
int is_prime(int a)
{
int i;
if(a==1)
return 0;
if(a>2)
{
for(i=2;i<=sqrt(a);i++)
{
if(a%i==0)
return 0;
}
}
return 1;
}
- 输入:12 6
- 输出:11+7+5+3+2=28//输出不够k个素数,输出正确
- 输入:1000 10
- 输出:997+991+983+977+971+967+953+947+941+937+929=10593
- //正确输出:997+991+983+977+971+967+953+947+941+937=9664
正确的代码
//求计算并输出不超过n的最大的k个素数以及它们的和。
//输出素数1+素数2+…+素数k=总和值
//其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。
#include<stdio.h>
#include<math.h>
int is_prime(int );
int main()
{
int n,k,i=0,j,sum=0;
scanf("%d %d",&n,&k);//输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。
int a[k];
for(;n>0&&i<k;n--)
{
if(is_prime(n))
{
a[i]=n;
i++;
sum=sum+n;
}
}
for(j=0;j<i;j++)
{
if(j<(i-1))
printf("%d+",a[j]);
else
printf("%d=%d",a[j],sum);
}
return 0;
}
int is_prime(int a)
{
int i;
if(a==1)
return 0;
if(a>2)
{
for(i=2;i<=sqrt(a);i++)
{
if(a%i==0)
return 0;
}
}
return 1;
}