1. 程式人生 > >[pat]數素數

[pat]數素數

時間限制:1000 ms 記憶體限制 32768 KB 程式碼長度限制 100 KB 判斷程式 Standard (來自 小小)

題目描述

令Pi表示第i個素數。現任給兩個正整數M <= N <= 10000,請輸出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>
#include<math.h>

//判斷一個數是否為素數方法一
int p(int y)
{
   int tem =sqrt(y),flag = 1;
   for(int i=2; i<=tem; i++)
   {
       if(y%i == 0)
       {
           flag=0;
           break;
       }
   }
   return flag;
}

//判斷一個數是否為素數方法二
int p2(int num)
{
    if(num == 2||num == 3)
        return 1;
    if(num%6 != 1&&num%6!=5 )
        return 0;
    int tem=sqrt(num);
    for(int i=5;i<=tem;i+=6)
    {
        if(num%i==0||num%(i+2)==0)
        {
            return 0;
        }
    }
    return 1;
}

//按格式輸出
void dis(int M,int N)
{
    int i=2,counts=0;
    while(1)
    {
        if(p(i))
        {
            counts++;
            if(counts>=M&&counts<=N)
            {
                if((counts-M+1)%10==0&&counts!= M)
                {
                  printf("%d\n",i);
                }
                else
                    if(counts == N)
                    {
                        printf("%d",i);
                        break;
                    }
                    else
                    {
                        printf("%d ",i);
                    }
            }
        }
        i++;
    }
}

int main()
{
    int M,N;
    scanf("%d%d",&M,&N);
    dis(M,N);
    return 0;
}