第2021个质数是什么(质数之和【计算第x个到第y个质数之和】)
题目:质数之和
已知 ,第一个质数是2 ,第二个质数是3,第三个质数是5 ,第四个质数是7 ,第五个质数是11 ,第六个质数是13 ,第七个质数是17 ,输入两个不相等的正整数a和b ,求出第a个质数到第b个质数当中所有质数和 。a和b之间以空格间隔 ,其中a和b都小于200 。
输入1:1 4 输出1:17
输入2:7 2 输出2:56
第一步:我们来分析题目
需要注意的要点有:
1.输入的a和b是“第几个质数 ” ,这启发我们需要使用数组;
2.求质数和 ,或许需要循环相加;
3.观察输入输出2可以发现,a 、b大小是不确定的!这就需要我们进行if判断两者之间的大小了 。
第二步:梳理题目块
经过分析 ,我们的c语言程序需要这几个部分:
1.判断一个数字是否为质数
为了方便和直观起见 ,我另定义了一个函数isPrime来判断质数,方法是:对所有从2开始到这个数字之间的 、能够被这个数字整除的数用count计数 。当count==0时 ,说明这个数除了1和它本身外没有其他因数了 ,即质数,return它自己;若count!=0,说明它不是质数 ,return 0 。
int isPrime(int x)
{
int i,count=0;
for(i=2 ; i
{
if(x%i==0)
{
count++;
}
}
if(count==0)
{
return x;
}
else
{
return 0;
}
}2.如果是质数 ,将这个质数的值赋给数组中的一个变量;如果不是 ,将这个数字加一以后再循环(发现这里是第一个循环)
int main()
{
int a[1000]={0},j,m;
int origin=2;
for(j=0 ; j<=1000 ; j++)
{
for(m=0 ; a[j]==0 ; m++)
{
if(isPrime(origin)==0)
{
origin++;
}
else
{
a[j] = origin;
origin++;
}
}
}3.输入x,y ,判断x,y大小之后分别赋给大数max和小数min ,利用循环和数组进行求和
int x,y;
scanf("%d %d",&x,&y);
int sum=0;
int max,min;
if(x>y)
{
max = x;
min = y;
}
else
{
max = y;
min = x;
}for(j=min-1 ; j
{
sum += a[j];
}
printf("%d",sum);return 0;
}第三步:整合代码
#include
int isPrime(int x)
{
int i,count=0;
for(i=2 ; i
{
if(x%i==0)
{
count++;
}
if(count==0)
{
return x;
}
else
{
return 0;
}
}int main()
{
int a[1000]={0},j,m;
int origin=2;
for(j=0 ; j<=1000 ; j++)
{
for(m=0 ; a[j]==0 ; m++)
{
if(isPrime(origin)==0)
{
origin++;
}
else
{
a[j] = origin;
origin++;
}
}
}int x,y;
scanf("%d %d",&x,&y);
int sum=0;
int max,min;
if(x>y)
{
max = x;
min = y;
}
else
{
max = y;
min = x;
}for(j=min-1 ; j
{
sum += a[j];
}
printf("%d",sum);return 0;
}创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!