首页 > 其他分享 >P2522 [HAOI2011] Problem b

P2522 [HAOI2011] Problem b

时间:2023-11-30 17:25:19浏览次数:32  
标签:aligned gcd int sum HAOI2011 P2522 Problem include

题意

求 \(\sum_{i = a} ^ {b} \sum_{j = c} ^ {d} [\gcd(i, j) = k]\)。

Sol

简单容斥一下。

\[\begin{aligned} \sum_{i = a} ^ {b} \sum_{j = c} ^ {d} [\gcd(i, j) = k] &= \sum_{i = 1} ^ {b} \sum_{j = 1} ^ {d} [\gcd(i, j) = k] \\ &- \sum_{i = 1} ^ {b} \sum_{j = 1} ^ {c - 1} [\gcd(i, j) = k] \\ &- \sum_{i = 1} ^ {a - 1} \sum_{j = 1} ^ {d} [\gcd(i, j) = k] \\ &+ \sum_{i = 1} ^ {a - 1} \sum_{j = 1} ^ {c - 1} [\gcd(i, j) = k] \end{aligned}\]

发现 \(i, j\) 都从 \(1\) 开始。与 P3455 相同。

Code

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <array>
#include <bitset>
#define int long long
using namespace std;
#ifdef ONLINE_JUDGE

#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf[1 << 23], *p1 = buf, *p2 = buf, ubuf[1 << 23], *u = ubuf;

#endif
int read() {
	int p = 0, flg = 1;
	char c = getchar();
	while (c < '0' || c > '9') {
		if (c == '-') flg = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		p = p * 10 + c - '0';
		c = getchar();
	}
	return p * flg;
}
void write(int x) {
	if (x < 0) {
		x = -x;
		putchar('-');
	}
	if (x > 9) {
		write(x / 10);
	}
	putchar(x % 10 + '0');
}
const int N = 1e5 + 5;

array <int, N> p, mu;
bitset <N> vis;
int cnt;

void Euler(int n) {
	mu[1] = 1;
	for (int i = 2; i <= n; i++) {
		if (!vis[i]) {
			cnt++;
			p[cnt] = i;
			mu[i] = -1;
		}
		for (int j = 1; j <= cnt && i * p[j] <= n; j++) {
			vis[i * p[j]] = 1;
			if (i % p[j] == 0) {
				mu[i * p[j]] = 0;
				break;
			}
			mu[i * p[j]] = -mu[i];
		}
	}
	for (int i = 1; i <= n; i++)
		mu[i] += mu[i - 1];
}

int query(int n, int m, int k) {
	n /= k, m /= k;
	if (n > m) swap(n, m);
	int res = 0, ans = 0;
	for (int i = 1; i <= n; i = res + 1) {
		res = min(n / (n / i), m / (m / i));
		ans += (mu[res] - mu[i - 1]) * (n / i) * (m / i);
	}
	return ans;
}

void solve() {
	int a = read(), b = read(), c = read(), d = read(), k = read();
	write(query(b, d, k) - query(b, c - 1, k) - query(a - 1, d, k) + query(a - 1, c - 1, k)), puts("");
}

signed main() {
	Euler(1e5);
	int T = read();
	while (T--) solve();
	return 0;
}

标签:aligned,gcd,int,sum,HAOI2011,P2522,Problem,include
From: https://www.cnblogs.com/cxqghzj/p/17867824.html

相关文章

  • Problem: E. Chocolate Bar
    题意:给定一个nm个方块组成的巧克力块,最终要吃到k个方块有两种切的方式:(nm)1.横着切,成本是mm2.竖着切,成本是nn做法:考虑记忆化搜索,使用dp[n][m][k]代表一个n*m的巧克力最后要得到k块所需要的最小成本状态转移:把每一次切的动作看作是一次转移:以n,m,k为例1.横着切,那么每......
  • Problem: B. Queries on a String
    题意简述:给出一个字符串,每次给定l,r,k,选择一个子串l-r,然后子串向右移动k个单位.做法:每次k对子串的长度取模,然后模拟即可(使用substr函数截取前半段和后半段,交换前半段和后半段即可)点击查看代码//Problem:B.QueriesonaString//Contest:Codeforces-EducationalCo......
  • Problem: A. Tricky Sum
    A:做法:数据比较小,用求和公式(n+1)*n/2,减去所有2的幂即可点击查看代码//Problem:A.TrickySum//Contest:Codeforces-EducationalCodeforcesRound1//URL:https://codeforces.com/contest/598/problem/A//MemoryLimit:256MB//TimeLimit:1000ms//Aut......
  • 论文:FEED-FORWARD NETWORKS WITH ATTENTION CAN SOLVE SOME LONG-TERM MEMORY PROBLEM
    题目:FEED-FORWARDNETWORKSWITHATTENTIONCANSOLVESOMELONG-TERMMEMORYPROBLEMS”(Raffel和Ellis,2016,p.1)“带有注意力的前馈网络可以解决一些长期记忆问题”(Raffel和Ellis,2016,p.1)(pdf)这篇论文提出了一种适用于前馈神经网络的简化注意力模型,并展示了......
  • The Design of Feedback Control Systems--Advanced Problems
    AP10.1Athree-axispick-and-placeapplicationrequirestheprecisemovementofaroboticarminthree-dimensionalspace,asshowninFigureAP10.1forjoint2.Thearmhasspecificlinearpathsitmustfollowtoavoidotherpiecesofmachinery.Theovers......
  • [ABC315Ex] Typical Convolution Problem
    题目链接首先观察到这个形式,容易发现它和常规的卷积不同点就在于:题目给出的求和定义中,\(\sum\)符号下面的式子是\(i+j<N\)求和而不是\(i+j=N\)。为了方便计算,我们引入:\[G_n=\sum_{i+j<N}F_iF_j\]我们发现,假设所有\(F_{1\sim{i-1}}\)已经求解完毕了,那么我们就可以通过之......
  • 2023 合肥站 热身赛 B Problem F. Flower’s Land 换根dp 依赖背包
    传送门。求出包含某个点连通块大小为K的权值和最大值。钦定1为根节点,只求根节点的答案,其实是一个依赖性01背包问题可以\(nk\)的时间内解决。考虑进行换根操作,由于背包是取max的背包没办法进行背包的删除,然而取前后缀背包背包的合并为\(k^2\)复杂度过高。当时还有一个想法是点......
  • [ABC327G] Many Good Tuple Problems
    题目链接简化题意:有一个\(n\)个点的图,问有多少个长度为\(M\)的边序列,满足连边后图是二分图。\(n\le30,m\le10^9\)考虑先强制要求无重边。定义\(f_{i,j}\)为\(i\)个点,\(j\)条边的图的二分图染色数量(染色方式不同算多次)。这个是可以通过枚举黑色点的数量算出来。然......
  • OI_problem 玛丽卡_洛谷P1186
    题意一个\(N\)个点\(M\)条边的带边权无向图,要求输出最小的\(V\)使得不管去掉哪一条边,都存在从\(1\)到\(n\)的路径使得边权和不超过\(V\)。思路感觉朴素不太好做,考虑二分。对于一个二分值,即要判断在关于这个值的生成图中,\(1\)和\(n\)在不在一个边双里。考......
  • [Codeforces] CF1703F Yet Another Problem About Pairs Satisfying an Inequality
    时间限制\(2s\)|空间限制\(250M\)题目描述给你一个序列$a_1,a_2,\dotsa_n$。请计算出满足下面条件的$(i,j)(1\leqi,j\leqn)$个数。$a_i<i<a_j<j$.输入格式第一行包含一个整数$t$($1\leqt\leq1000$)—测试数据的个数每一个......