处女座的测验(一)

题目:处女座的测验(一)

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld

题目描述 

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

1.       任意两个数互质

2.     任意两个数x,y,满足,其中为n的因子的个数
 
举例:6的因子有1,2,3,6,所以τ(6)=4τ(6)=4

输入描述:

本题没有输入

输出描述:

2000行,每行一个正整数

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

题解:

考点:质数,构造

τ 是积性函数,x,y互质,τ(x⋅y)=τ(x)⋅τ(y) 只需保证τ(x)≥4即可,找出前4000个质数构造即可。取第1个质数个第 4000个质数相乘,取第2个质数和第3999个质数相乘……这样最大的数在 4e8以内。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define maxn 1000000
 4 int pri[maxn+5];
 5 void getprime()
 6 {
 7     int i,j;
 8     for (i=2;i<=maxn;i++)
 9     {
10         if (pri[i]==0) pri[++pri[0]]=i;
11         for (j=1;j<=pri[0] && pri[j]<=maxn/i;j++)
12         {
13             pri[pri[j]*i]=1;
14             if (i%pri[j]==0) break;
15         }
16     }
17 }
18  
19 int main()
20 {
21     getprime();
22     for (int i=1;i<=2000;i++)
23     {
24         printf("%d
",pri[i]*pri[4001-i]);
25     }
26     return 0;
27 }
View Code
原文地址:https://www.cnblogs.com/liuyongliu/p/10316559.html