题目:质数之和
已知,第一个质数是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<x ; 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<max ; j++)
	    {
		      sum += a[j];
	    }
	    printf("%d",sum);
	    return 0;
  }
第三步:整合代码
#include<stdio.h>
int isPrime(int x)
{
	  int i,count=0;
	  for(i=2 ; i<x ; 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<max ; j++)
	  {
		    sum += a[j];
	  }
	  printf("%d",sum);
	  return 0;
}