数素数 (20)
数素数 (20)
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB
题目描述
令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
思路:
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 }