• 恼人的素数


    作者: ijrys
    单位: 青岛大学
    时间限制: 1000ms
    内存限制: 64MB
    代码长度限制: 16KB

    连羽疲倦的推开公主阁的门,“啊啊啊,怎么会留这么麻烦的作业。”
    “既然布置了,那就没有办法了啊,今晚一起算就好了。”连辰拍了拍连羽的背,表示鼓励。
    荆盈将做好的菜端到餐桌上,看着勉强露出笑容的两人问道:“所以你们老师布置了什么题啊?”
    “关于素数的题,老师给了一个很大的数,问是不是素数。”连辰解释道。
    “素数啊,我到是知道些比较快的判断方法。”
    “真的?”连羽如同见了救星一般。

    作为立志要成为计算机天才的你们,能帮助连羽么?

    输入格式:

    多组测试
    每组测试有一行,为一个正整数k(k < 10^9),

    输出格式:

    每组测试输出一行,
    若k为素数,输出“Yes”,否则输出“No”

    输入样例:

    2
    7
    15
    21
    23
    233
    2333
    23333
    233333
    2333333

    输出样例:

    在这里给出相应的输出。例如:

    Yes
    Yes
    No
    No
    Yes
    Yes
    Yes
    Yes
    No
    No

    思路:
    1E9开根后是31622.7766017≈32000。
    也就是说用正常的素数判断方法最大需要判断到32000,
    那只要能减少判断的数量自然就能加快。
    很容易发现如果一个数N,N%2!=0,那N%4、N%6、N%8都不可能为零。所以只需要判断N%2就行了,即判断2——sqrt(N)中的素数即可。
    代码:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <cmath>
    
    using namespace std;
    
    bool board[32005];
    int prime[5000];//存储2-32000中的所有素数。
    int flag;
    
    void Build(){
        board[1] = true;
        for(int i = 2 ; i<32000 ; i++){
            if(board[i] == false){
                for(int j=i*2 ; j<32000 ; j+=i)board[j] = true;
            }
        }                    //用筛选法找出素数
        for(int i=2 ; i<32000 ; i++){
            if(board[i] == false)prime[flag++] = i;
        }  
    }
    
    int isPrime(int N){
        if(N<=1)return 0;
        for(int i=0 ; prime[i]<=sqrt(N)&&i<flag ; i++){
            if(N%prime[i] == 0)return 0;
        }
        return 1;
    } //判断是否是素数
    
    int main(){
        int N;
        Build();
        while(scanf("%d",&N)!=EOF){
            if(isPrime(N))printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    Commonjs规范 浏览器运行
    node Commonjs规范
    Node 支持ES6 modules
    node only 对象属性白名单
    babel 关键配置
    Linux测试硬盘读性能的常用工具-hdparm
    linux下/etc/profile、/etc/bashrc、~/.bashrc 和~/.bash_profile文件的区别
    storcli64和smartctl定位硬盘的故障信息
    数据库迁移的几种方式
    linux中截取字段与#、$区别
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514258.html
Copyright © 2020-2023  润新知