bzoj 3309 DZY Loves Math

LINK:DZY Loves Math

一道比较有意思的数论题 原谅我的智障多调了40min.

可以简单的推式子推出 答案为\(\sum{w=1}^n\frac{n}{w}\frac{m}{w}\sum{x|w}\mu(x)f(\frac{w}{x})\)

f函数定义和题目中一致。

考虑后面前缀和怎么求 发现光求f(x)复杂度都比较高。如果我们把f(x)求出再调和级数预处理 那得GG 1e7过不了log+根号

考虑考虑一下\(\mu\)和f的这种形式肯定值有局限 设后面的东西为g(x) 不难发现g(x)只有三种取值。

不难证明当 x的质因子指数都相同时答案为\((-1)^{k+1}\).其余情况为0 特殊的当只有一个质因子的时候答案为1.

具体证明可以分析讨论x的质因子指数长啥样来讨论 或者 列举几个数字。O(n)预处理就能过辣。

const int MAXN=10000010;
int n,m,maxx,T,top;
int p[MAXN],v[MAXN],a[MAXN],b[MAXN],g[MAXN];
inline void prepare()
{
	rep(2,maxx,i)
	{
		if(!v[i])
		{
			p[++top]=v[i]=b[i]=i;
			a[i]=g[i]=1;
		}
		rep(1,top,j)
		{
			if(maxx/i<p[j])break;
			int ww=i*p[j];
			v[ww]=p[j];
			if(v[i]==p[j])
			{
				a[ww]=a[i]+1;
				b[ww]=b[i]*p[j];
				int w1=ww/b[ww];
				g[ww]=w1==1?1:(a[ww]==a[w1])?-g[w1]:0;
				break;
			}
			else
			{
				a[ww]=1;b[ww]=p[j];
				g[ww]=a[ww]==a[i]?-g[i]:0;
			}
		}
	}
	rep(1,maxx,i)g[i]+=g[i-1];
}
int main()
{
	freopen("1.in","r",stdin);
	get(T);maxx=10000000;prepare();
	while(T--)
	{
		get(n);get(m);
		if(n>m)swap(n,m);
		ll w1,w2,ww,ans=0;
		for(int i=1;i<=n;i=ww+1)
		{
			w1=n/i;w2=m/i;
			ww=min(n/w1,m/w2);
			ans=ans+(ll)(g[ww]-g[i-1])*w1*w2;
		}
		putl(ans);
	}
	return 0;
}

原文地址:https://www.cnblogs.com/chdy/p/12550826.html

时间: 2024-10-07 08:06:17

bzoj 3309 DZY Loves Math的相关文章

bzoj 3309 DZY Loves Math - 莫比乌斯反演 - 线性筛

对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample Input 4 7558588 9653114 6514903 445

bzoj 3309 DZY Loves Math——反演+线性筛

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 像这种数据范围,一般是线性预处理,每个询问 sqrt (数论分块)做. 先反演一番.然后 f( ) 还不能一个就花 log 的时间,所以要分析性质. 设 n 一共 m 个质因数,其中最大的指数是 t . 已有 Σ(d|n) f(d)*u(n/d) ,如果 u( ) 的部分含有指数>=2的质因子,就无贡献:所以 u( ) 里每种质因数选1个或0个,一共 2^m 种. 如果 n 里有一个

BZOJ 3309 DZY Loves Math 莫比乌斯反演

题目大意: 枚举d=gcd(i,j),得到 现在我们只需要知道Σ[d|T]f(d)μ(T/d)的前缀和就行了 设这个函数为g(x) 观察这个函数 由于含平方因子数的μ值都为零,因此我们只考虑μ(T/d)!=0的数 令T=p1^a1*p2^a2*...*pk^ak,d=p1^b1*p2^b2*...*pk^bk 那么0<=(ai-bi)<=1 如果存在ai≠aj(i≠j),那么我们可以将所有的a分为两部分:最大的集合A和非最大的集合B 很显然f值由A中的选取方案决定 对于A中的每种选取方案,μ值

莫比乌斯反演 bzoj 3309 DZY Loves Math

好久没有写反演了 感觉不会了 首先推一个经典的式子啊 \[ans = \sum_{D=1}^{n}\sum_{d|D}f(d)\mu(\frac{D}{d})\frac{n}{D}\frac{m}{D}\] 记\(g(D) = \sum_{d|D}f(d)\mu(\frac{D}{d})\) 结论挺好找的啊 把一个数拆成\({p_k}^{a_k}\)形式 如果所有\(a_k\)相同 那么\(g(D) = (-1)^{k+1}\) 否则\(g(D) = 0\) 证明就考虑两个集合 所有次幂为最大的

【BZOJ】3309: DZY Loves Math 莫比乌斯反演优化

3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample In

bzoj 3560 DZY Loves Math V - 线性筛 - 数论 - 扩展欧几里得算法

给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 Hint 1<=n<=10^5,1<=ai<=10^7.共3组数据. 题目大意 (题目过于简洁,完全不需要大意) 题目虽然很简洁,但是处处挖着坑等你跳. 原计划两个小时把今天讲的例题A完,实际上两个小时都被这道题

BZOJ 3560 DZY Loves Math V 数论

题目大意:给定a1,a2,...,an,求 由于φ是积性函数,我们可以将i1i2...in分解质因数,对于每个质因数分开讨论,求积即可 将每个a分解质因数,假设分解后某个质数p在每个ai中的次数分别是bi,那么p对答案的贡献就是 于是对p^j维护一个前缀和,直接计算即可 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MOD 10000

bzoj 3512: DZY Loves Math IV

Description 给定n,m,求 模10^9+7的值. Solution 设 \(S(n,m)\) 表示 \(\sum_{i=1}^{m}\phi(n*i)\) \(Ans=\sum_{i=1}^{n}S(i,m)\) \(S(n,m)=\sum_{i=1}^{m}\phi(n*i)\) 如果 \(\mu(n)!=0\) 则有 \(\sum_{i=1}^{m}\phi(\frac{n}{gcd(i,n)})*\phi(i)*gcd(i,n)\) (因为要保证除完\(gcd\)之后,两数不含

【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)

3560: DZY Loves Math V Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 241  Solved: 133 Description 给定n个正整数a1,a2,-,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,-,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 HINT 1<=n<=1