处女座的测验(一)(素数筛+思维)
链接: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;
}
作者:李斌
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步