zoukankan      html  css  js  c++  java
  • (素数筛) 找质数

    一天蒜头君猜想,是不是所有的偶数(除了 2),都可以用两个质数相加得到呢?


    输入格式
    第一行输入一个整数 t 表示测试组数。
    接下来 t 行,每行一个整数 n。


    输出格式
    输出两个整数,因为答案可能有多个,所有要求输出的这两个整数是所有答案中字典序最小的。


    数据范围
    对于 30%的数据 1<=t<=10^3
    对于 60% 的数据 1<=t<=10^5
    对于 100% 的数据 1<=t<=10^6,4<=n<=10^6,n 为偶数。

    解法一:用素数筛打表存入数组,遍历时,判断 i 和 n-i 是不是素数就比较方便(AC)

    复制代码
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    
    bool p[1000005];
    int main() {
        int n;
        int m;
        scanf("%d",&n);
        for(int i=2;i<=1000000;i++){                   
            p[i]=true;
        }
        for(int i=2;i*i<=1000000;i++){           //素数筛打表 
            if(p[i]){
                for(int j=i*i;j<=1000000;j+=i){
                    p[j]=false;
                }
            }
        }
        while(n--){
            scanf("%d",&m);
            for(int i=2;;i++){
                if(p[i]&&p[m-i]){               //只要某数 i 和 m-i都为质数 则为结果所求 
                    printf("%d %d
    ",i,m-i);
                    break;
                }
            }
        }
        return 0;
    }
    复制代码

    解法二:用30%的数据在10^3,暴力破解可以通过部分。

    复制代码
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    bool prime(long x){                           //判断素数 
        for(int i=2;i*i<=x;i++){
            if(x%i==0) return false;
        }
        return true;
    } 
    int main() {
        int n;
        int m;
        scanf("%d",&n);
        while(n--){
            scanf("%d",&m);
            for(int i=2;;i++){
                if(prime(i)&&prime(m-i)){         //遍历1到m,判断i 和 m-i是不是素数 
                    printf("%d %d
    ",i,m-i);
                    break;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    爬虫大作业
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    综合练习:词频统计
    Hadoop综合大作业
    理解MapReduce
    熟悉HBase基本操作
    熟悉常用的HBase操作
  • 原文地址:https://www.cnblogs.com/xusi/p/12398686.html
Copyright © 2011-2022 走看看