zoukankan      html  css  js  c++  java
  • 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次方的。

  • 相关阅读:
    NTFS的交换数据流ADS应用
    解决binwalk运行提示缺少LZMA模块
    蓝牙扫描工具btscanner修复暴力扫描模式
    iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态
    Visual Studio 2017 版本 15.5.5
    iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观
    jquery的基本api
    vue知识点总结
    历史记录
    http加密原理
  • 原文地址:https://www.cnblogs.com/lingr7/p/10292015.html
Copyright © 2011-2022 走看看