1013. 数素数 (20)

来源:互联网 发布:淘宝投诉电话怎么打 编辑:程序博客网 时间:2024/06/03 23:44

1013. 数素数 (20)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

输入格式:

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

输出格式:

输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 103

方法一暴力搜索

方法二优化的筛选法(参照算法笔记P163),需要开数组


方法一:

#include<stdio.h>#include<math.h>int main(){int m,n,cou1=0,cou2=0,cou3=0,flag=1;scanf("%d%d",&m,&n);int i,j;for(i=2;cou1<n;i++){flag=1;for(j=2;j<=sqrt(i);j++){if(i%j==0){flag=0;break;}}if(flag){cou1++;if(cou1>=m){cou2++;if(cou1!=n){//printf("%d ",i);//if(cou2%10==0){//printf("\n");//}if(cou2%10==0){printf("%d\n",i);}else{printf("%d ",i);}}else{printf("%d",i);break;}}}}}


方法二:

#include <stdio.h>const int maxn = 1000001;int prime[maxn], num = 0;bool p[maxn] = {0};void Find_Prime(int n) {    for(int i = 2; i < maxn; i++) {        if(p[i] == false) {            prime[num++] = i;            if(num >= n) break;            for(int j = i + i; j < maxn; j += i) {                p[j] = true;            }        }    }}int main() {    int m, n, count = 0;    scanf("%d%d", &m, &n);    Find_Prime(n);    for(int i = m; i <= n; i++) {        printf("%d",prime[i - 1]);        count++;        if(count % 10 != 0 && i < n) printf(" ");        else printf("\n");    }    return 0;}


原创粉丝点击