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) = n^2 - \sum\limits_{i = 1}^{n}\sum\limits_{j=1}^{n}[lcm(i,j)+gcd(i,j) < n]\\
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]
\]

\[G(n) = \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]\\
\]

\[H(n) = \sum\limits_{i=1}^{n+1}\sum\limits_{j=1}^{n+1}[ij = n][gcd(i,j) = 1]\\
= \sum\limits_{i=1} [gcd(i, \dfrac{n}{i}) = 1]
\]

\[G(n) = \sum\limits_{d|n} H(\dfrac{n}{d} - 1)
\]

不难想到,将\(n\)质因数分解后,\(p_x^{a_x}\)要么在\(i\)那一部分,要么在\(\dfrac{n}{i}\)那一部分,所以

\[H(n) = 2^k (k \mbox{ is the number of prime factors of }n)
\]

所以\(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!的更多相关文章

  1. Mathematics:GCD & LCM Inverse(POJ 2429)

    根据最大公约数和最小公倍数求原来的两个数 题目大意,不翻译了,就是上面链接的意思. 具体思路就是要根据数论来,设a和b的GCD(最大公约数)和LCM(最小公倍数),则a/GCD*b/GCD=LCM/G ...

  2. 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 ...

  3. [POJ 2429] GCD & LCM Inverse

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10621   Accepted: ...

  4. POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)

    [题目链接] http://poj.org/problem?id=2429 [题目大意] 给出最大公约数和最小公倍数,满足要求的x和y,且x+y最小 [题解] 我们发现,(x/gcd)*(y/gcd) ...

  5. UVA - 11388 GCD LCM

    II U C   ONLINE   C ON TEST  Problem D: GCD LCM Input: standard input Output: standard output The GC ...

  6. hdu-3071 Gcd & Lcm game---质因数分解+状态压缩+线段树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...

  7. [ 9.13 ]CF每日一题系列—— 340A GCD & LCM

    Description: [ 着实比较羞愧,都想着去暴力,把算法(方法)也忘了] A只涂x,2x,3x……,B只涂y,2y,3y……问你A和B共同涂的墙的个数 Solution: 就是求x和y的lcm ...

  8. 【HDU 5382】 GCD?LCM! (数论、积性函数)

    GCD?LCM! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  9. 数论入门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 ...

随机推荐

  1. [POI2013] LAN-Colorful Chain - 桶

    给定一个序列,求有多少个子串使得 \(c_i\) 这个数在这个序列中出现了 \(l_i\) 次,且不存在其它的数. Solution 滑动窗口搞一下 #include <bits/stdc++. ...

  2. jquery赋值

    $("#test1").text("Hello world!"); $("#test2").html("<b>Hell ...

  3. linux学习之编译-链接

    在Windows下使用习惯了IDE,导致我们对程序的编译链接没有一个清晰的认识,甚至混淆了编辑器和编译器的概念.在学习Linux时,这些问题就暴露出来了. 实际上,我们应该严格区分一个程序从产生到执行 ...

  4. C# 读取Excel到DataTable两种方式对比

    方式一 OLEDB读取 数据库引擎 优点:读取速度快,依据sheet排序读取 缺点:对于Excel版本依赖强,无法读取指定sheet 错误提示:本地计算机未指定 Microsoft.ACE.OLEDB ...

  5. 在source insight project中删除文件夹或者文件的通用方法

    1.删除文件夹或者文件在硬盘上的数据 2.project->synchronize files...看到如下图,然后勾选remove missing files from project

  6. 学习Python常用的工具

    Python编程语言 Python是一门高级计算机程序设计语言! Python是一种解释型(脚本)语言,因为其代码简明,书写效率高,功能强大.易扩展.有丰富的专业库而受大众欢迎! 最常用的专业库有: ...

  7. BZOJ3680 JSOI2004 平衡点 - 随机/近似算法

    迭代乱搞了下就过了…… #include <bits/stdc++.h> using namespace std; ],y[],w[]; double xm,ym,wt,k,lambda= ...

  8. Virtual DOM(八)

    Virtual DOM 这个概念相信大部分人都不会陌生,它产生的前提是浏览器中的 DOM 是很“昂贵"的,为了更直观的感受,我们可以简单的把一个简单的 div 元素的属性都打印出来,如图所示 ...

  9. 浅谈radis

    1.概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 从2010年3月15日起,Redis的开发工作由VM ...

  10. Java基本语法--运算符

    运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等.本篇博客详细介绍Java基本语法中的运算符,主要包括算术运算符.赋值运算符.比较运算符(关系运算符).逻辑运算符.位运算符.三元运算符. Ja ...