链接:https://ac.nowcoder.com/acm/contest/327/H
来源:牛客网
处女座进行了一场c语言的考试,要求很简单,输出2000个正整数,并且满足以下条件:
1. 任意两个数互质
2. 任意两个数x,y,满足,其中为n的因子的个数
举例:6的因子有1,2,3,6,所以τ(6)=4τ(6)=4
输入描述:
本题没有输入
输出描述:
2000行,每行一个正整数
输出的每个整数都必须在1-4*108之间
如果有多组答案,输出任意一组即可。
分析:
对于质数而言T()是积性函数也就是T(x*y)=T(x)*T(y)
要使T(x*y)=T(x)*T(y)>10,则T(x),T(y)>=4
又质数的T值为2,所以筛出所需数的两倍即4000个就行
为了满足范围我们让最小的和最大相乘,次小的和次大的相乘依次类推。
#include<stdio.h>
int a[4005];
bool not_prime[1000005];
void prime()
{
int cnt=0;
for(int i=2;;i++)
{
if(!not_prime[i])
a[cnt++]=i;
if(cnt>4000)
break;
for(int j=0;j<cnt&&i*a[j]<1000000;j++)
{
not_prime[a[j]*i]=1;
if(i%a[j]==0)break;
}
}
}
int main()
{
prime();
for(int i=0;i<2000;i++)
{
printf("%d\n",a[i]*a[3999-i]);
}
}