1363 最小公倍数之和

推式子

∑i=1nlcm(i,n)=n∑i=1nigcd(i,n)=n∑d∣n∑i=1nid(gcd(i,n)==d)=n∑d∣n∑i=1ndi(gcd(i,nd)==1)=n∑d∣ndϕ(d)+(d==1)2\sum_{i = 1} ^{n} lcm(i, n)\\ = n\sum_{i = 1} ^{n} \frac{i}{gcd(i, n)}\\ = n \sum_{d \mid n} \sum_{i = 1} ^{n} \frac{i}{d}(gcd(i, n) == d)\\ = n \sum_{d \mid n} \sum_{i = 1} ^{\frac{n}{d}}i (gcd(i, \frac{n}{d}) == 1)\\ = n \sum_{d \mid n} \frac{d \phi(d) + (d == 1)} {2}\\ i=1∑n​lcm(i,n)=ni=1∑n​gcd(i,n)i​=nd∣n∑​i=1∑n​di​(gcd(i,n)==d)=nd∣n∑​i=1∑dn​​i(gcd(i,dn​)==1)=nd∣n∑​2dϕ(d)+(d==1)​

接下来就是筛出n\sqrt nn​内的质数,再通过递归算出所有的因数,然后加上所有的因数对答案的贡献,具体细节在代码中描述。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 1e5 + 10, mod = 1e9 + 7;int prime[N], cnt;bool st[N];void init() {for(int i = 2; i < N; i++) {if(!st[i]) prime[cnt++] = i;for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) break;}}
}int fac[50], num[50], tot;ll ans;void solve(int pos, int n, int phi) {if(pos == tot + 1) {ans = (ans + 1ll * n * (phi + (n == 1)) / 2 % mod) % mod;//特判n为1的情况。return ;}solve(pos + 1, n, phi);//不选这个数的情况。n *= fac[pos], phi *= (fac[pos] - 1);//第一次选这个数要单独考虑,当两个数互质的时候phi[i * prime] = phi[i] * (prime - 1)solve(pos + 1, n, phi);for(int i = 1; i < num[pos]; i++) {n *= fac[pos], phi *= fac[pos];//这里就是不互质的情况了solve(pos + 1, n, phi);}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T = read();while(T--) {tot = 0;int n = read(), m = n;for(int i = 0; prime[i] * prime[i] <= n; i++) {if(n % prime[i] == 0) {fac[++tot] = prime[i], num[tot] = 0;while(n % prime[i] == 0) {n /= prime[i];num[tot]++;}}}if(n != 1) {fac[++tot] = n, num[tot] = 1;}ans = 0;solve(1, 1, 1);printf("%lld\n", ans * m % mod);}return 0;
}

51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)相关推荐

  1. [51 nod 1238] 最小公倍数之和 V3(杜教筛)

    1238 最小公倍数之和 V3 推式子 ∑i=1n∑j=1nlcm(i,j)=∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1n∑j=1nijd(gcd(i,j)==d)=∑d=1nd∑i ...

  2. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷--(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解--那么既然A了就来骗一波访问量吧-- (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧-- ...

  3. 51nod1040 最大公约数之和,欧拉函数或积性函数

    1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6时,1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 看起来很简单 ...

  4. 51nod 1188 最大公约数之和 V2(欧拉函数)

    1188 最大公约数之和 V2 思路 用欧拉函数可以化简式子如下 ∑i=1n∑j=1i−1gcd(i,j)\sum_{i = 1} ^{n} \sum _{j = 1} ^{i - 1} gcd(i, ...

  5. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  6. UvaLive7362 Fare(欧拉函数)

    题意:求1~n的素因子之和. 分析:欧拉函数 1 #include<cstdio> 2 #include<cstring> 3 #include<cctype> 4 ...

  7. poj2154-color-polyan次二面体+欧拉函数优化

    N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) 1 /*-------------------------- ...

  8. hdu1395 数论 欧拉函数

    hdu1395 数论   欧拉函数 对于给出的每一个n 求最小正整数 x 满足 2^x mod n = 1 1.如果给出的n 是偶数或者 1 则一定无解 2.如果是奇数 首先根据欧拉定理 我们可知 p ...

  9. 欧拉函数的相关应用 noj欧拉函数求和+noj 最大公约数求和

    注意求欧拉函数之和是每个因子的欧拉函数之和不是质因子.而欧拉函数的值是它本身与它的因子件事互质的关系,这样的因子有多少个.点击打开链接 #include<stdio.h> #include ...

最新文章

  1. 【MPI编程】MPI_Bcast广播讲解和使用
  2. C++继承中关于子类构造函数的写法
  3. 类的加载连接和初始化
  4. 电脑home键在哪_如何灵活使用电脑键盘上的各个键
  5. Linux通过端口查找tomcat的路径
  6. 鼎微方案导航一体机刷机包_SMB方案之星 | 海康威视人脸门禁一体机产品应用方案集锦...
  7. 连载四:PyCon2018|恶意域名检测实例(附源码)
  8. 一个关于C++ Inline关键字的引发的一个错误
  9. python之词频统计
  10. Android设备通过fastboot刷入TWRP
  11. 青岛海洋超级计算机,青岛海洋科学与技术试点国家实验室
  12. 谷歌翻译退出中国后如何恢复 Chrome 浏览器翻译的正常使用
  13. 系统设计时要考虑哪些方面?
  14. 12.2.1 QTcpSocket类介绍
  15. Ubuntu 16.04 修改Home目录下的 中文目录 为英文目录
  16. Liferay Portal CVE-2020-7961
  17. 进程上下文与线程上下文
  18. NoClassDefFoundError解决方案
  19. 【教程】Redmi 5 root参考教程
  20. 数据恢复软件哪个好用?点开看看你就知道了

热门文章

  1. linux下网口监控软件_超赞的!Aibaba技术官分享高性能Linux服务器解读笔记
  2. 骗人的数学题,那消失的1块钱到底被谁拿走了
  3. 每日一笑 | 爱的魔力转圈圈~
  4. 21个令程序员泪流满面的瞬间【第二弹】
  5. java更新数据库错误就回滚_Java 中对数据库操作时的 回滚
  6. 涨薪关键之反射机制,引得项目经理对你的看重,加薪触手可及!!!!
  7. java中如何运行小程序_一起学java(一)——运行第一个小程序
  8. 3dsmax子菜单无法选择_3DsMax—用平面图片制作3D模型
  9. mysql 用户概念_传输概念 – db对象的用户/组/权限从mysql到postgresql
  10. 群同态基本定理证明_群论(7): 群代数, 群表示基础