处女座的测验(一)(2019牛客寒假算法基础集训营 Day2-H)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011815404/article/details/86633960

【题目描述】

处女座进行了一场 c 语言的考试,要求很简单,输出2000个正整数,并且满足以下条件:

1.任意两个数互质

2.任意两个数 x,y,满足 τ(x*y)>10,其中为 n 的因子的个数

举例:6的因子有1,2,3,6,所以 τ(6)=4

【输入描述】

本题没有输入

【输出描述】

2000行,每行一个正整数

输出的每个整数都必须在1-4*10^8之间
如果有多组答案,输出任意一组即可。

思路:

根据 τ 函数的性质,可以推出其是一个积性函数,满足 τ(x⋅y)=τ(x)⋅τ(y),因此只需要保证 τ(x)≥4 即可,打前 4000 个质数的表,然后进行构造,取第 1 个质数与第 4000 个质数相乘,取第 2 个质数和第 3999 个质数相乘,依次类推,这样可保证最大的数在 4e8 以内

【源代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define N 1000001
#define LL long long
using namespace std;
LL prime[N],cnt;
bool bprime[N];
void make_prime()
{
	memset(bprime,true,sizeof(bprime));
	bprime[0]=false;
	bprime[1]=false;

    for(LL i=2;i<=N;i++)
    {
        if(bprime[i])
        {
            prime[cnt++]=i;
            for(LL j=i*2;j<=N;j+=i)
                bprime[j]=false;
        }
    }
}

int main(){
    make_prime();
    for(int i=1;i<=2000;i++)
        printf("%lld\n",prime[i]*prime[4000-i]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u011815404/article/details/86633960
今日推荐