http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1363

\[\begin{aligned}
&\sum_{i=1}^n\frac{in}{(i,j)}\\
=&n\sum_{d|n}\sum_{i=1}^{\frac nd}\left[\left(i,\frac nd\right)=1\right]i\\
=&n\left(1+\sum_{d|n,d\neq n}\sum_{i=1}^{\left\lfloor\frac {n}{2d}\right\rfloor}\left[\left(i,\frac nd\right)=1\right]\right)\\
=&n+\frac n2\sum_{d|n,d\neq 1}d\varphi(d)
\end{aligned}
\]

重点是统计\(\sum\limits_{d|n,d\neq 1}d\varphi(d)\)

\[\begin{aligned}
&\sum_{d|n,d\neq 1}d\varphi(d)\\
=&\prod\sum_{j=0}^{c_i}p_i^j\times\varphi\left(p_i^j\right)-1\\
=&\prod\left(1+\sum_{j=1}^{c_i}p_i^{2j-1}\left(p_i-1\right)\right)-1\\
=&\prod\left(1+\frac{p_i^{2c_i+1}-p_i}{p_i+1}\right)-1
\end{aligned}
\]

质因子分解统计就可以了,时间复杂度\(O\left(T\sqrt n\right)\)。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. const int N = 100000;
  7. const int p = 1000000007;
  8. bool notp[N + 3];
  9. int T, n, prime[N + 3], num = 0, ni[N + 3];
  10. void Euler_shai() {
  11. for (int i = 2; i <= N; ++i) {
  12. if (!notp[i]) prime[++num] = i;
  13. for (int j = 1; j <= num && prime[j] * i <= N; ++j) {
  14. notp[prime[j] * i] = true;
  15. if (i % prime[j] == 0) break;
  16. }
  17. }
  18. ni[1] = 1;
  19. for (int i = 2; i <= N; ++i)
  20. ni[i] = 1ll * (p - p / i) * ni[p % i] % p;
  21. }
  22. int ipow(int a, int b) {
  23. int r = 1, w = a;
  24. while (b) {
  25. if (b & 1) r = 1ll * r * w % p;
  26. w = 1ll * w * w % p;
  27. b >>= 1;
  28. }
  29. return r;
  30. }
  31. int cal(int x) {
  32. int ret = 1, ci;
  33. for (int i = 1, pi = 2; i <= num && pi * pi <= x; pi = prime[++i]) {
  34. if (x % pi == 0) {
  35. ci = 1; x /= pi;
  36. while (x % pi == 0) x /= pi, ++ci;
  37. ret = 1ll * ret * (1ll * (ipow(pi, 2 * ci + 1) - pi + p) % p * ni[pi + 1] % p + 1) % p;
  38. }
  39. }
  40. if (x > 1) {
  41. ret = 1ll * ret * ((1ll * x * x % p * x % p - x + p) % p * ipow(x + 1, p - 2) % p + 1) % p;
  42. }
  43. return ret;
  44. }
  45. int main() {
  46. Euler_shai();
  47. scanf("%d", &T);
  48. while (T--) {
  49. scanf("%d", &n);
  50. printf("%lld\n", (1ll * n * ni[2] % p * (cal(n) - 1) % p + n) % p);
  51. }
  52. return 0;
  53. }

【51Nod 1363】最小公倍数之和的更多相关文章

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

  2. 51nod - 1363 - 最小公倍数之和 - 数论

    https://www.51nod.com/Challenge/Problem.html#!#problemId=1363 求\(\sum\limits_{i=1}^{n}lcm(i,n)\) 先换成 ...

  3. 51nod 1238 最小公倍数之和 V3

    51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...

  4. 51nod 1363 最小公倍数的和 欧拉函数+二进制枚举

    1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3 ...

  5. 51NOD 1238 最小公倍数之和 V3 [杜教筛]

    1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...

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

  7. 51nod 1238 最小公倍数之和 V3 【欧拉函数+杜教筛】

    首先题目中给出的代码打错了,少了个等于号,应该是 G=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 10000 ...

  8. 51nod 1190 最小公倍数之和 V2【莫比乌斯反演】

    参考:http://blog.csdn.net/u014610830/article/details/49493279 这道题做起来感觉非常奇怪啊--头一次见把mu推出来再推没了的-- \[ \sum ...

  9. [51Nod 1238] 最小公倍数之和 (恶心杜教筛)

    题目描述 求∑i=1N∑j=1Nlcm(i,j)\sum_{i=1}^N\sum_{j=1}^Nlcm(i,j)i=1∑N​j=1∑N​lcm(i,j) 2<=N<=10102<=N ...

  10. 【学术篇】51nod 1238 最小公倍数之和

    这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...

随机推荐

  1. IntelliJ Idea key shortcuts

    >Default explaination Official IntelliJ Idea 常用快捷键列表 Shortcuts Ctrl+Shift + Enter,语句完成 "!&qu ...

  2. 【CF343D】 Water Tree(树链剖分)

    题目链接 树剖傻逼题,练练手好久没写树剖了. 查询忘记\(pushdown\)抓了好久虫.. 全文手写,一遍过... #include <cstdio> const int MAXN = ...

  3. SMTP暴力破解

    这里实现一个SMTP的暴力破解程序,实验搭建的是postfix服务器,猜解用户名字典(user.txt)和密码字典(password.txt)中匹配的用户名密码对, 程序开发环境是: WinXP VC ...

  4. python初步学习-面向对象之 类(二)

    方法重写 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法: #!/usr/bin/env python #coding:utf8 class Parent: def myMeth ...

  5. 福建工程学院寒假作业第一周G题

    涨姿势题1 TimeLimit:1000MS  MemoryLimit:128000KB 64-bit integer IO format:%lld   涨姿势题就是所谓的优化题,在组队赛中,队伍发现 ...

  6. Opencv 配置VS2012

    开始接触图像处理有一段时间了,经过前期的调研,和相关入门知识的学习,开始接触一些图像处理应用的工具.Opencv是一个图像处理的开源库,由于其开放的协议架构,国内外很多科研机构和团队都在基于openc ...

  7. mysql的一些规范

    我司的mysql规范,值得牢记 一.禁止内容 表字段类型 不推荐使用enum,set,blob,text等类型 表中所有字段都不能为空,需要设置not null属性,可以给默认值 表的主键列值禁止被更 ...

  8. linux配置samba服务【原创】

    转载请注明出处http://www.cnblogs.com/paul8339/p/7509981.html 需求,windows服务器访问linux的共享文件,需要linux服务器安装并配置samba ...

  9. POJ - Problem 2282 - The Counting Problem

    整体思路:对于每一位,先将当前未达到$limit$部分的段 [如 $0$ ~ $10000$] 直接处理好,到下一位时再处理达到$limit$的部分. · $1 × 10 ^ n$以内每个数(包括$0 ...

  10. php 7.3.3安装问题记录

    1.checking for libzip... not foundconfigure: error: Please reinstall the libzip distribution 参考:http ...