PAT(乙):1013. 数素数

令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。

输入格式:

输入在一行中给出M和N,其间以空格分隔。

输出格式:

输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

这道题用朴素素数判断算法很简单,但有个数据会超时,因此我用的是试除法,即平方判断,这样效率就高很多。

代码如下:

#include"stdio.h"
#include"stdlib.h"
int main()
{
  int M,N,*prime,i,j,sum=0;
  bool isprime;
  scanf("%d %d",&M,&N);
  prime = (int*)malloc((N+1)*sizeof(int));
  i=2;
  while(sum<N)
  {
    isprime = true;
    for (j=2;j*j<=i;j++)
    {
      if (i%j==0)
      {
        isprime = false;break;
      }
    }
    if (isprime)
    {
      prime[sum++] = i; 
    }
    i++;
  }
  for (i=M-1;i<N;i++)
  {
    printf("%d",prime[i]);
    if((i-M+2)%10==0||i==N-1)
    {
      printf("\n");
    }
    else
    {
      printf(" ");
    }
  }
  free(prime);
  return 0;
}

猜你喜欢

转载自blog.csdn.net/gfuasg/article/details/79561716