处女座的测验(一)(素数筛+思维)

链接: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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

black-hole6

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值