题目:处女座的测验(一)
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
空间限制: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 }