链接: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(x*y)=T(x)*T(y)故只需要保证素数的因子为T(x)>=4即可,便可以把前四千个素数筛出来,然后用第一个去×最后一个,这样组成的两千个即可,因为有数据范围,所以我们肯定筛选前4000个
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int prime[1000005];
bool vis[1000005];
void erla() {
int cnt =0;
memset(vis,false,sizeof(vis));
memset(prime,0,sizeof(prime));
for(int t=2; t<=1000005; t++) {
if(!vis[t]) {
prime[cnt++]=t;
}
for(int j=0; j<cnt&&t*prime[j]<=1000005; j++) {
vis[t*prime[j]]=true;
if(t%prime[j]==0) {
break;
}
}
}
}
int a[4005];
int main()
{
erla();
int s=0;
for(int t=2; t<=1000005; t++) {
if(!vis[t]) {
a[s++]=t;
}
if(s==4000) {
break;
}
}
for(int t=0; t<s/2; t++) {
printf("%d:%d*%d\n",a[t]*a[s-t-1],a[t],a[s-t-1]);
}
return 0;
}