【牛客 - 327牛客寒假算法基础集训营2 H】处女座的测验(一)(积性函数性质,数论,素数)

版权声明:欢迎学习我的博客,希望ACM的发展越来越好~ https://blog.csdn.net/qq_41289920/article/details/87897665

题干:

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

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

解题报告:

水题,懒得写题解贴一个博客的题解吧、、

对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数
满足τ(x·y)>10,τ(x⋅y)=τ(x)⋅τ(y)   =>  要满足 τ(x) 和 τ(y) ≥4 

观察不同的质数a,b相乘(c = a * b),得到的c的因子有1, a , b , a*b,所以τ( c ) = 4 ,正好满足≥4。

那么就需要找出前4000个质数,令第1个和第4000个相乘,第2个与第3999个相乘(1<=x*y<=4*108)。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
int n;
int tot;
int dd[MAX];
bool is(int x) {
	if(x <= 1) return 0;
	for(int i = 2; i*i<=x; i++) {
		if(x%i==0) return 0;
	}
	return 1;
}
int main()
{
	for(int i = 1; tot<=4001; i++) {
		if(is(i)) dd[++tot] = i;
	}
	for(int i = 1; i<=2000; i++) {
		printf("%lld\n",1LL*dd[i]*dd[4001-i]);
	}
	return 0 ;
 }

猜你喜欢

转载自blog.csdn.net/qq_41289920/article/details/87897665