处女座的测验(一)

处女座的测验(一)

链接: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*1e8之间

 

 

如果有多组答案,输出任意一组即可。

 

解题思路:本题对输出的正整数的要求有两个,一个是要求任意两数互质,这一点我们可以往素数或者连续自然数方面去想

,而第二点要求任意两数乘积的因子个数大于十个,自然数这方面并不好满足这个条件,我们可以往素数方面去想,假设a,b,

c,d为四个素数,那么a*b*c*d将拥有,a,b,c,d,a*b,a*c,a*d,b*c,b*d,a*b*c,b*c*d...等因子,这是大于10个的,并且两两素数相乘

也可以满足互质的条件,最后一点,数据范围不能超过4*1e8,那么我们不能选择2*3,3*5,5*7这样的形势,因为这样会导致第

2000个数特别大的情况,所以我们选择第一个素数和第4000个数相乘,第2个数和第3999个数相乘。。。。这种形式来解题

代码如下

#include<math.h>

#include<iostream>

#include<algorithm>

#define mod 1000000007

using namespace std;

int a[1000005]={0};

int main()
{
	for(int i = 2; i <= 1000; i++)
	{
		if(a[i])
		    continue;
		for(int j = i; j * i <= 100000; j++)
		{
			a[i * j] = 1;
		}	
	}
	long long int ans = 0;
	int num[10005] = {0};
	for(int i = 2; ans <= 4000; i++)
	{
		if(!a[i])
		{
			num[ans] = i;
			ans++;
		}
	}
	for(int i = 1; i <= 2000; i++)
	{
		printf("%d\n", num[i] * num[ans - i]);
		
	}
	//printf("%d\n",ans);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值