数素数 (20)

数素数 (20)

时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB

题目描述

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

输入描述:

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


输出描述:

输出从P
M
到P
N
的所有素数,每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

 

 

思路:

1、理清概念:素数又称质数,是除了1和本身没有其他因子的自然数。1不是素数。

2、已知2是素数

从3开始判断数字i是否是素数,若是,则判断是否是第m到第n个素数之间的素数。是则输出,不是则继续寻找。

3、i是待判断是否是素数的数字,j是试探是否是i的因数的数字。

若小于sqrt(i)的数都不是i的因子,则大于sqrt(i)的数均不可能是i的因子。

 

需要注意的:

1、输出格式:最后一个数后面不能跟空格,所以单独拎出来输出。

2、因为编写代码时把第一个素数2当做已知条件,所以需要将若需要第一个素数的情况考虑进去。



 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5     int m,n;
 6     int i,j,temp=0,count=1;//temp是已打印的数字个数,count是已知的素数个数 
 7     bool su=true;
 8     
 9     scanf("%d %d",&m,&n);
10     
11     if(m==1||n==1){
12         printf("2");
13         temp++;
14     }
15     
16     for(i=3;temp<=(n-m+1)&&count<=n;i++){
17         for(j=2;j<=sqrt(i)&&su;j++){
18             if(i%j==0){
19                 su=false;
20                 break;
21             }
22         }
23         if(su){
24             count++;
25             if(count>=m&&count<n){
26                 printf("%d",i);
27                 temp++;
28                 if(temp%10==0)
29                     printf("\n");
30                 else
31                     printf(" ");
32             }
33             if(count==n){
34                 printf("%d",i);
35                 temp++;
36             }            
37         }
38         su=true;
39     }
40     return 0;
41 }

 

posted on 2017-04-13 15:34  AndKuang  阅读(1449)  评论(0)    收藏  举报

导航