• PAT 1013 数素数 (20)


    题目

    /*
     1013. 数素数 (20)
     
     令Pi表示第i个素数。现任给两个正整数M <= N <= 10^4,请输出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
     */
    

    思路

    // 先得到前1000个素数
    // 再根据输入进行输出
    
    

    代码

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    using namespace std;
    
    #define NUM 10004
    int primes[NUM];
    
    void findPrimes(){
    	
    	//如果不能被任何一个质数整除,那就是质数
    	int cnt=0;// 第cnt个质数,从1开始计数
    	int a = 2;// 从2开始的自然数 a
    	while (cnt <= NUM) {
    		// 优化1:排除偶数
    		if (a % 2 == 0 && a != 2) {
    			++a;
    			continue;
    		}
    
    		int i = 0;
    		// 优化2:不超过第cnt个质数的开方数
    		for (i = 0; i < sqrt(cnt); ++i) {
    			if (a % primes[i] == 0) {
    				break;
    			}
    		}
    		if (i >= sqrt(cnt)) {
    			primes[cnt] = a;
    			cnt++;
    
    		}
    		++a;
    	}
    	
    }
    int main(){
    	
    	// 预处理
    	findPrimes();
    	
    	// 输入数据
    	int m,n;
    	cin >> m >> n;
    	
    	// 按格式输出
    	for(int i = m; i <= n; ++i){
    		
    		cout << primes[i-1];
    		
    		if ((i-m+1) % 10 == 0 || i == n) {
    //			cout << endl;
    			printf("
    ");
    		}else{
    //			cout << ' ';
    			printf(" ");
    		}
    		
    	}
    }
    

    过程资料

    测试点:

    1. 共7个测试点,测试点4是一个较大数测试,其他都是小数目,因此如果无法给出较好的大数处理方案可以做小数处理取得部分分数。
  • 相关阅读:
    sql中关于存在就不做操作的代码块
    mysql插入多条数据时间复杂度比较
    oracle in VS or效率
    如何实现分布式数据库
    angularJS操作键值对象(类似java的hashmap)填坑小结
    angularJS 如何读写缓冲
    angularJs自定义服务(实现签名和加密)
    ajax请求技术
    springboot中使用mybatis显示执行sql
    mysql快速生成truncate脚本清空数据库表记录
  • 原文地址:https://www.cnblogs.com/tangyikejun/p/4300409.html
Copyright © 2020-2023  润新知