首页 > 其他分享 >Codeforces Round #818 (Div. 2) E 补题

Codeforces Round #818 (Div. 2) E 补题

时间:2022-09-04 23:44:08浏览次数:88  
标签:typedef gcd int LL 818 补题 Div MOD define

原题链接

发现枚举\(gcd(a,b)\)的值时间复杂度最优,因为\(a+b=k*gcd(a,b) (k=2,3,4...)\),这样的话总的枚举次数就是调和级数,所以外层枚举的复杂度为\(O(nlogn)\),问题转化为怎么快速得到同时满足\(gcd(a,b)=i\)和\(a+b=k*i\)这两个条件的\((a,b)\)数量
有一个引理,设\(a+b=c\),那么\(gcd(a,b)=1\)的充要条件是\(gcd(a,c)=1\)这篇题解有证明
那么数对\((a,b)\)满足条件的充要条件就是\(gcd(a/i,k*i/i)=1\),就是求小于\(k\)并且与\(k\)互质的正整数个数,即为\(k\)的欧拉函数
总的时间复杂度\(O(nlognlogn)\)

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;

#define fr first
#define se second
#define et0 exit(0);
#define rep(i, a, b) for(int i = (int)(a); i <= (int)(b); i ++)
#define rrep(i, a, b) for(int i = (int)(a); i >= (int)(b); i --)
#define IO ios::sync_with_stdio(false),cin.tie(0);

typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef unsigned long long ULL;

const int INF = 0X3f3f3f3f, N = 1e5 + 10, MOD = 1e9 + 7;
const double eps = 1e-7, pi = acos(-1);

LL phi[N];
int primes[N], st[N];

LL get_eulers(int n) {
	int cnt = 0;
	LL res = 0;
	phi[1] = 1;
	for (int i = 2; i <= n; i++) {
		if (!st[i]) {
			primes[cnt++] = i;
			phi[i] = i - 1;
		}
		for (int j = 0; primes[j] * i <= n; j++) {
			st[primes[j] * i] = 1;
			if (i % primes[j] == 0) {
				phi[i * primes[j]] = phi[i] * primes[j];
				break;
			} else phi[i * primes[j]] = phi[i] * (primes[j] - 1);
		}
	}
	for (int i = 1; i <= n; i++) res += phi[i];
	return res;
}

int gcd(int x, int y) {
	return y == 0 ? x : gcd(y, x % y); 
}

inline int add(int x, int y) {
	return (LL) x + y > MOD ? x + y - MOD : x + y;
}

int lcm(int x, int y) {
	return (LL)x / gcd(x, y) * y % MOD;
}

void work() {
	int n;
	cin >> n;
	int res = 0;
	rep (i, 1, n) {
		for (int j = 2 * i; j < n; j += i) {
			res = add(res, (LL)phi[j / i] * lcm(n - j, i) % MOD);
		}
	}
	cout << res << endl;
}

signed main() {
	IO
	get_eulers(N);

	int test = 1;

	while (test--) {
		work();
	}

	return 0;
}

标签:typedef,gcd,int,LL,818,补题,Div,MOD,define
From: https://www.cnblogs.com/xhy666/p/16656544.html

相关文章

  • Codeforces Round #818 (Div. 2) A-E
    CodeforcesRound#818(Div.2)A-E传送门题目A问有多少对\(1\leqa,b\leqn\),满足\(\frac{lcm(a,b)}{gcd(a,b)}\leq3\)已知\(lcm(a,b)=a*b/gcd(a,b)\),原式可化为\(......
  • CF #818 E - Madoka and The Best University
    欧拉函数,枚举Problem-E-Codeforces题意给定整数\(n(1<=n<=10^5)\),对于所有的正整数三元组\((a,b,c)\),求\(lcm(c,gcd(a,b))\)的和思路对于数论题可以多尝试......
  • Codeforces Round #818 (Div. 2) CF1717 解题报告
    CodeforcesRound#818(Div.2)CF1717解题报告ADescription求出满足\(1\lea,b\leN,\frac{\operatorname{lcm}(a,b)}{\gcd(a,b)}\le3\)的二元组\((a,b)\)的数目。......
  • codeforces#818(Div.2)
    算了,不摆烂了,事情太多,没摆烂的时间了。在我研究出如何把某平台上多年积累的流量变现前,就继续用这个博客记录日常吧。之后所有内容基于时间,就懒得设置标签分类之类的了。昨......
  • Codeforces Round #818 (Div. 2) D
      D:题意:由2^n个人进行锦标赛,编号1~2^n,每一场输的人失去比赛资格,赢的人继续。你可以选择他们进行的顺序,以及决定哪一边赢得比赛。你的目标是尽量让编号小的人赢得最......
  • 2020 CCPC Wannafly Winter Camp Day5 Div.1&2
    大失败。A签到题,题面太长没做。B树上传递闭包问题。原本是想着倒着做能求解答案,使用并查集,后来发现并查集并不对正解是维护一个可到达点的数量利用树的特点容斥了一......
  • Codeforces Round #818 (Div. 2) D Madoka and The Corruption Scheme
    MadokaandTheCorruptionScheme组合数+思维+贪心首先要思考一开始要如何摆放才是最优秀的按照完全二叉树(根就是最后赢的那个),给所有的点赋予权值,代表需要转换多少......
  • Codeforces Round #818 (Div. 2)
    CodeforcesRound#818(Div.2)D.MadokaandTheCorruptionScheme题目大意给定一场比赛,有\(2^n\)个参赛者。赞助商有k次机会可以调整某一局的结果。而我们想要知道......
  • Codeforces Round #719 (Div. 3) E. Arranging The Sheep(字符串)
    https://codeforces.com/contest/1520你在玩“放羊”游戏。这个游戏的目标是让羊排好队。游戏中的关卡由一个长度为n的字符串描述,由字符“.”组成(空格)和'*'(羊)。......
  • Codeforces Round #818 (Div. 2) C Madoka and Formal Statement
    MadokaandFormalStatement思维如果合法,说明\(a_i\leb_i\),因此也可以认为\(b_i\)就是\(a_i\)最后能变成的最大值根据题意操作,只有\(a_i\lea_{i+1}\)的情况......