【51Nod 1190】最小公倍数之和 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1190
&\sum_{i=a}^b\frac{ib}{(i,b)}\\
=&b\sum_{i=a}^b\frac i{(i,b)}\\
=&b\sum_{d|b}\sum_{i=a}^b[d|i]\left[\left(\frac id,\frac bd\right)=1\right]\frac id\\
=&b\sum_{d|b}\sum_{i=\left\lceil\frac ad\right\rceil}^{\frac bd}\left[\left(i,\frac bd\right)=1\right]i\\
=&b\sum_{d|b}\sum_{i=\left\lceil\frac ad\right\rceil}^{\frac bd}i\sum_{d'|i,d'|\frac bd}\mu(d')\\
=&b\sum_{d|b}\sum_{d'|\frac bd}\mu(d')\sum_{i=\left\lceil\frac {a}{dd'}\right\rceil}^{\frac{b}{dd'}}id'\\
=&b\sum_{T|b}\sum_{d|T}\mu(d)\sum_{i=\left\lceil\frac aT\right\rceil}^{\frac bT}id\\
=&b\sum_{T|b}\frac{\left(\left\lceil\frac aT\right\rceil+\frac bT\right)\left(\frac bT-\left\lceil\frac aT\right\rceil+1\right)}{2}\sum_{d|T}\mu(d)d
\end{aligned}
\]
\(\sum\limits_{d|T}\mu(d)d=\prod\left(1-p_i\right)\),只要确定T的质因子就可以确定\(\sum\limits_{d|T}\mu(d)d\)的值。
如果循环枚举T找b的约数,无法快速计算T的质因子。
可以dfs枚举b的约数T,动态计算\(\sum\limits_{d|T}\mu(d)d\)的值。
时间复杂度\(O\left(T\sqrt n\right)\)。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 100000;
const int p = 1000000007;
const int ni2 = 500000004;
bool notp[N];
int a, b, tot, P[N], c[N], num = 0, prime[N];
void Euler_shai() {
	for (int i = 2; i <= N; ++i) {
		if (!notp[i]) prime[++num] = i;
		for (int j = 1; j <= num && prime[j] * i <= N; ++j) {
			notp[prime[j] * i] = true;
			if (i % prime[j] == 0) break;
		}
	}
}
void pre(int x) {
	tot = 0;
	for (int i = 1, pi = 2; i <= num && pi * pi <= x; pi = prime[++i])
		if (x % pi == 0) {
			P[++tot] = pi; c[tot] = 0;
			while (x % pi == 0) x /= pi, ++c[tot];
		}
	if (x > 1)
		P[++tot] = x, c[tot] = 1;
}
int ans;
void dfs(int tmp, int T, int f) {
	if (tmp > tot) {
		int l = a / T, r = b / T;
		if (a % T) ++l;
		(ans += 1ll * (l + r) * (r - l + 1) % p * ni2 % p * f % p) %= p;
		return;
	}
	dfs(tmp + 1, T, f);
	int tt = T, ff = 1ll * f * (1 - P[tmp] + p) % p;
	for (int i = 1; i <= c[tmp]; ++i) {
		tt *= P[tmp];
		dfs(tmp + 1, tt, ff);
	}
}
int main() {
	Euler_shai();
	int T; scanf("%d", &T);
	while (T--) {
		scanf("%d%d", &a, &b);
		pre(b);
		ans = 0;
		dfs(1, 1, 1);
		printf("%lld\n", 1ll * b * ans % p);
	}
	return 0;
}
												
											【51Nod 1190】最小公倍数之和 V2的更多相关文章
- 51nod 1190 最小公倍数之和 V2
		
给出2个数a, b,求LCM(a,b) + LCM(a+1,b) + .. + LCM(b,b). 例如:a = 1, b = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30 ...
 - 51nod 1190 最小公倍数之和 V2【莫比乌斯反演】
		
参考:http://blog.csdn.net/u014610830/article/details/49493279 这道题做起来感觉非常奇怪啊--头一次见把mu推出来再推没了的-- \[ \sum ...
 - 51nod 1238 最小公倍数之和 V3
		
51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...
 - 51NOD 1238 最小公倍数之和 V3 [杜教筛]
		
1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...
 - 51nod 1363 最小公倍数之和  ——欧拉函数
		
给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mod 1000 ...
 - 51nod - 1363 - 最小公倍数之和 - 数论
		
https://www.51nod.com/Challenge/Problem.html#!#problemId=1363 求\(\sum\limits_{i=1}^{n}lcm(i,n)\) 先换成 ...
 - [51nod1190]最小公倍数之和V2(莫比乌斯反演)
		
题解 传送门 题解 我是真的不明白这玩意儿是怎么跟反演扯上关系的-- 首先 \[ \begin{align} ans &=b\sum_{d|b}{1\over d}\sum_{i=a}^{b} ...
 - 51nod 1238 最小公倍数之和 V3 【欧拉函数+杜教筛】
		
首先题目中给出的代码打错了,少了个等于号,应该是 G=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 10000 ...
 - [51Nod 1238] 最小公倍数之和 (恶心杜教筛)
		
题目描述 求∑i=1N∑j=1Nlcm(i,j)\sum_{i=1}^N\sum_{j=1}^Nlcm(i,j)i=1∑Nj=1∑Nlcm(i,j) 2<=N<=10102<=N ...
 
随机推荐
- [php]referer应用--http防盗链技术
			
1.防盗链的理解 所谓防盗链是防止其他的网站引用自己网站的资源连接,比如图片.视频等等,但是并不会阻碍从自己网站上享受资源的用户,这就要求能够将其他网站的连接请求阻止 2.防盗链的原理 其实从自己网站 ...
 - 【BZOJ】2134: 单选错位 期望DP
			
[题意]有n道题,第i道题有ai个选项.把第i道题的正确答案填到第i+1道题上(n填到1),问期望做对几道题.n<=10^7. [算法]期望DP [题解]正确答案的随机分布不受某道题填到后面是否 ...
 - windows7下安装配置phonegap3.0 (cordavo)开发环境 (涉及android sdk配置)
			
之前在mac上安装调试过phonegap,现在公司用的是windows7,所以不得不再进行一次windows下的配置工作,顺便也写下来了 主要麻烦的地方是要在win7下添加好几个环境变量,这一块地方特 ...
 - C#里面中将字符串转为变量名
			
public partial class Form1 : Form { string str = "spp"; public string spp = "very goo ...
 - HZ与Jiffies
			
2.4 内核定时器 内核中许多部分的工作都高度依赖于时间信息.Linux内核利用硬件提供的不同的定时器以支持忙等待或睡眠等待等时间相关的服务.忙等待时,CPU 会不断运转.但是睡眠等待时,进程将放弃C ...
 - Machine Learning系列--L0、L1、L2范数
			
今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大,为了不吓到大家,我将这个五个 ...
 - jquery 通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)
			
jquery 通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素) $("ul").append("<li cla ...
 - [写出来才有价值系列:node.js]node.js 02-,learnyounode
			
安装learnyounode: npm install g learnyounode 官方说直接 但是我发现不行,很慢几乎就是死在那里了 还好有淘宝的东西给我们用https://npm.taobao. ...
 - C# Winform频繁刷新导致界面闪烁解决方法
			
C#Winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将 ...
 - fedora16下更改网卡名字
			
fedora16下更改网卡名字 今天由于网络启动出错的原因,在网上搜索,发现大部分人的网卡名字都是eth0,可是我的却是p3p1,所以想改成eth0. 然后google了下,发现设备命名什么的 ...