[HDU5382]GCD?LCM!
Description
HDU5382
会吗?不会!
设\(F(n)=\sum\limits_{i = 1}^{n}\sum\limits_{j=1}^{n}[lcm(i,j)+gcd(i,j)\ge n]\),求\(S(n)=\sum\limits_{i=1}^{n}F(n)\)
Soluiton
F(n) - F(n-1) = n^2 - \sum\limits_{i = 1}^{n}\sum\limits_{j=1}^{n}[lcm(i,j)+gcd(i,j) < n] - (n-1)^2 - \sum\limits_{i = 1}^{n-1}\sum\limits_{j=1}^{n-1}[lcm(i,j)+gcd(i,j) < n-1]\\
= 2n - 1 - \sum\limits_{i = 1}^{n}\sum\limits_{j=1}^{n}[lcm(i,j)+gcd(i,j) = n]\\
F(n) = F(n-1) + (2n-1) - \sum\limits_{i = 1}^{n}\sum\limits_{j=1}^{n}[lcm(i,j)+gcd(i,j) = n]
\]
设
= \sum\limits_{i = 1}^{n}\sum\limits_{j=1}^{n}[\dfrac{k_igcd(i,j)\cdot k_j gcd(i,j)}{gcd(i,j)}+gcd(i,j) = n]\\
= \sum\limits_{d=1}^{n}\sum\limits_{i=1}^{\lfloor \dfrac{n}{d} \rfloor}\sum\limits_{j=1}^{\lfloor \dfrac{n}{d} \rfloor}[ijd + d = n][gcd(i,j) = 1]\\
= \sum\limits_{d|n}\sum\limits_{i=1}^{\dfrac{n}{d}}\sum\limits_{j=1}^{\dfrac{n}{d}}[(ij) = \dfrac{n}{d} - 1][gcd(i,j) = 1]\\
\]
设
= \sum\limits_{i=1} [gcd(i, \dfrac{n}{i}) = 1]
\]
则
\]
不难想到,将\(n\)质因数分解后,\(p_x^{a_x}\)要么在\(i\)那一部分,要么在\(\dfrac{n}{i}\)那一部分,所以
\]
所以\(H(n)\) 是一个积性函数,可以欧拉筛。然后在计算每个\(H\)对\(G\)的贡献,这样复杂度是\(O(nlogn)\)的,然后就能\(O(n)\)的求出\(F\)和\(S\)。
综上,这个题不涉及NOIp以外的知识,NOIp可以考这么难的
Code
#include <bits/stdc++.h>
typedef long long LL;
const int N = 1e6 + 10;
const LL MOD = 258280327;
LL F[N], G[N], H[N], S[N];
int notp[N], pri[N], cnt;
int get_prime() {
for (int i = 1; i < N; ++i) H[i] = 1;
for (int i = 2; i < N; ++i) {
if (!notp[i]) {
pri[cnt++] = i;
H[i] = 2;
}
for (int j = 0; j < cnt; ++j) {
int k = i * pri[j];
if (k >= N) break;
notp[k] = 1;
if (i % pri[j] == 0) {
(H[k] *= H[i]) %= MOD;
break;
}
else {
(H[k] *= 2 * H[i] % MOD) %= MOD;
}
}
}
for (int i = 1; i < N; ++i) {
for (int j = i; j < N; j += i) {
G[j] = (G[j] + H[j/i - 1]) % MOD;
}
}
F[1] = 1;
for (int i = 2; i < N; ++i) {
F[i] = ((LL)F[i-1] + i + i - 1LL - G[i-1]) % MOD;
}
for (int i = 1; i < N; ++i) {
S[i] = (S[i-1] + F[i]) % MOD;
}
}
int main() {
get_prime();
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
printf("%d\n", S[n]);
}
return 0;
}
[HDU5382]GCD?LCM!的更多相关文章
- Mathematics:GCD & LCM Inverse(POJ 2429)
根据最大公约数和最小公倍数求原来的两个数 题目大意,不翻译了,就是上面链接的意思. 具体思路就是要根据数论来,设a和b的GCD(最大公约数)和LCM(最小公倍数),则a/GCD*b/GCD=LCM/G ...
- POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)
题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd lcm/gcd=a/gcd*b/gcd 可知a/gc ...
- [POJ 2429] GCD & LCM Inverse
GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10621 Accepted: ...
- POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)
[题目链接] http://poj.org/problem?id=2429 [题目大意] 给出最大公约数和最小公倍数,满足要求的x和y,且x+y最小 [题解] 我们发现,(x/gcd)*(y/gcd) ...
- UVA - 11388 GCD LCM
II U C ONLINE C ON TEST Problem D: GCD LCM Input: standard input Output: standard output The GC ...
- hdu-3071 Gcd & Lcm game---质因数分解+状态压缩+线段树
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...
- [ 9.13 ]CF每日一题系列—— 340A GCD & LCM
Description: [ 着实比较羞愧,都想着去暴力,把算法(方法)也忘了] A只涂x,2x,3x……,B只涂y,2y,3y……问你A和B共同涂的墙的个数 Solution: 就是求x和y的lcm ...
- 【HDU 5382】 GCD?LCM! (数论、积性函数)
GCD?LCM! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho
数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...
随机推荐
- [POI2013] LAN-Colorful Chain - 桶
给定一个序列,求有多少个子串使得 \(c_i\) 这个数在这个序列中出现了 \(l_i\) 次,且不存在其它的数. Solution 滑动窗口搞一下 #include <bits/stdc++. ...
- jquery赋值
$("#test1").text("Hello world!"); $("#test2").html("<b>Hell ...
- linux学习之编译-链接
在Windows下使用习惯了IDE,导致我们对程序的编译链接没有一个清晰的认识,甚至混淆了编辑器和编译器的概念.在学习Linux时,这些问题就暴露出来了. 实际上,我们应该严格区分一个程序从产生到执行 ...
- C# 读取Excel到DataTable两种方式对比
方式一 OLEDB读取 数据库引擎 优点:读取速度快,依据sheet排序读取 缺点:对于Excel版本依赖强,无法读取指定sheet 错误提示:本地计算机未指定 Microsoft.ACE.OLEDB ...
- 在source insight project中删除文件夹或者文件的通用方法
1.删除文件夹或者文件在硬盘上的数据 2.project->synchronize files...看到如下图,然后勾选remove missing files from project
- 学习Python常用的工具
Python编程语言 Python是一门高级计算机程序设计语言! Python是一种解释型(脚本)语言,因为其代码简明,书写效率高,功能强大.易扩展.有丰富的专业库而受大众欢迎! 最常用的专业库有: ...
- BZOJ3680 JSOI2004 平衡点 - 随机/近似算法
迭代乱搞了下就过了…… #include <bits/stdc++.h> using namespace std; ],y[],w[]; double xm,ym,wt,k,lambda= ...
- Virtual DOM(八)
Virtual DOM 这个概念相信大部分人都不会陌生,它产生的前提是浏览器中的 DOM 是很“昂贵"的,为了更直观的感受,我们可以简单的把一个简单的 div 元素的属性都打印出来,如图所示 ...
- 浅谈radis
1.概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 从2010年3月15日起,Redis的开发工作由VM ...
- Java基本语法--运算符
运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等.本篇博客详细介绍Java基本语法中的运算符,主要包括算术运算符.赋值运算符.比较运算符(关系运算符).逻辑运算符.位运算符.三元运算符. Ja ...