[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
",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;
}
原文地址:https://www.cnblogs.com/Ghost4C-QH/p/9890794.html