题目描述
令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
题目分析:
例如求m是否为素数,只需判断m是否能整除2到sqrt(m),不用到m,减少循环次数。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#pragma warning(disable:4996)
int isprime(int n)
{
int i;
for (i = 2; i <= (int)sqrt((double)n); i++)
if (n%i == 0)
return 0;
return 1;
}
int main()
{
int i = 2, j = 0, n, m, k = 0;
scanf("%d%d", &n, &m);
while (true)
{
if (isprime(i))
{
j++;
if (j >= n && j < m)
{
k++;
if (k % 10 == 0)
printf("%d\n", i);
else
printf("%d ", i);
}
if (j == m)
{
printf("%d\n", i);
break;
}
}
i++;
}
system("pause");
return 0;
}