• 处女座的测验 素数,构造


    题目链接:https://ac.nowcoder.com/acm/contest/327/H

    这道题既然要任意两个数互质,那么肯定这些数都是质数,然后我们要考虑怎么让两个数相乘的积的因子个数大于10,对于任意一个质数来说它的因子数都是只有两个1和它本身,那么两个质数相乘就是有4个,比如2和3的话就是1 2 3 6,那么再让这两个质数相乘的积再相乘的话,就会一共有16个因子,比如2 3 5 7,就会有1 2 3 5 6 7 10 14 15 21 30 35 42 70 105 210,所以任意的四个质数相乘的结果的因子个数都是16个,所以根据这个条件我们先筛除前4000个质数,然后首尾两两相乘就可以得到需要的2000个数了(如果不是首尾相乘而是相邻两个相乘,到后面会超过题目要求的范围)

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int inf=1<<30;
    const int maxn=1e6+7;
    const double pi=acos(-1);
    const int mod=1e9+7;
    int phi[maxn], prime[maxn],book[maxn];
    int cnt;//tot计数,表示prime[N]中有多少质数 
    void GetPrime(){
        cnt = 0;
        memset(book,0,sizeof(book));
        for(int i=2;i<maxn;i++){
            if(!book[i]){
                prime[cnt++] = i;
                if(cnt == 4000) break;
                for(int j=i+i;j<maxn;j += i){
                    book[j] = 1;
                }
            }
        }
    }
    int main(){    
        GetPrime();
        int l=0,r=3999;
        for(int i=0;i<2000;i++){
            cout<<prime[l]*prime[r]<<endl;
            l++,r--;
        }
        return 0;
    }
  • 相关阅读:
    SlideShare
    准备SCJP考试
    Sun的过去
    shardingjdbc基础教程
    上万页大数据量的分页查询方案
    shardingjdbc教程 看这一篇就够了
    微服务化的认识
    JDK9对String底层存储的优化
    水平分表
    深入理解Java中的字段与属性的区别
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/10682333.html
Copyright © 2020-2023  润新知