• B1013 数素数(20分)


    B1013 数素数(20分)

    (P​_i)表示第 i 个素数。现任给两个正整数 (M≤N≤10^4),请输出 (P_M)(P_N)的所有素数。

    输入格式:

    输入在一行中给出 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

    思考

    这个问题是否需要筛法?
    我觉得是需要的,因为10的4次方已经很大了,是素数的个数达到10的4次方。
    算法笔记上说,筛法和非筛法都可以解决问题。
    那么首先用非筛法试一下。
    前100009个数有9593个素数。所以这里用不用筛法,都可以解决问题前1000009有78499个素数;
    每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
    怎么办?这种输出形式。
    给出第4个测试点答案错误的代码

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    const int MAXN=100009;
    int prime[MAXN], pNum = 0;
    bool p[MAXN] = {0};
    bool isPrime(int n){
    	if(n<=1) return false;
    	int sqr=(int)sqrt(1.0*n);
    	for(int i=2;i<=sqr;i++){
    		if(n%i==0) return false;
    	}
    	return true;
    }
    
    void Find_Prime(){
    	for(int i = 1; i<MAXN;i++){
    		if(isPrime(i) == true){
    			prime[pNum++] = i;
    			p[i] = true;
    		}
    	}
    }
    int main(){
    	Find_Prime();
    	int M,N;
    	int enter=0; 
    	scanf("%d %d", &M, &N);
    	for(int i=M-1;i<N-1;i++){
    		printf("%d",prime[i]);
    		enter++;
    		if(enter!=10){
    			printf(" ");
    		}
    		else {
    			printf("
    ");
    			enter = 0;
    		}
    	}
    	printf("%d",prime[N-1]);
    }
    

    不断扩大打表范围
    终于在扩大到
    const int MAXN=110050;时候AC掉了,估计是最大的极限的素数10的4次方的。

  • 相关阅读:
    2.4.6 处理表单 的 工作原理的解释
    nginx proxy模块
    nginx负载均衡模块
    Oracle正在执行和执行过的SQL语句
    nginx
    linux :故障提示:Error:No suitable device found: no device found for connection "System eth0"
    memcached
    一致性哈希算法(consistent hashing)(转)
    大规模网站sesson会话保持思路及实践配置
    AB压力测试工具
  • 原文地址:https://www.cnblogs.com/lingr7/p/10292015.html
Copyright © 2020-2023  润新知