Description

Given \(n\), calculate the sum \(LCM(1,n) + LCM(2,n) + \cdots + LCM(n,n)\), where \(LCM(i,n)\) denotes the Least Common Multiple of the integers \(i\) and \(n\).

Input

The first line contains \(T\) the number of test cases. Each of the next \(T\) lines contain an integer \(n\).

Output

Output \(T\) lines, one for each test case, containing the required sum.

Sample Input

3

1

2

5

Sample Output

1

4

55

HINT

\(1 \le T \le 300000\)

\(1 \le n \le 1000000\)

题目求$$\sum_{i=1}^{n}LCM(i,n)$$

根据\(LCM\)的公式,即$$\sum_{i=1}^{n}\frac{i \times n}{GCD(i,n)}$$

我们枚举\(GCD\)——\(g\),即$$\sum_{g=1}^{n}[g \mid n]n \sum_{i=1}^{n}i[GCD(i,n)=g]$$

化简一下,转而求$$\sum_{g=1}^{n}[g \mid n]n \sum_{i=1}^{n}i[GCD(\frac{i}{g},\frac{n}{g})=1]$$

变化一下\(i\)的范围:$$\sum_{g=1}^{n}[g \mid n]n \sum_{i=1}^{\frac{n}{g}}i[GCD(i,\frac{n}{g})=1]$$

\(\sum_{i=1}^{\frac{n}{g}}i[GCD(i,\frac{n}{g})=1]\)即\(\frac{n}{g}\)内与之互质的数的和,这个有个公式:$$\sum_{i=1}^{n}i[GCD(n,i)=1]= \frac{\phi(n) \times n}{2}$$

如何证明,假设某个数\(a\)与\(n\)互质,那么\(n-a\)一定也与\(n\)互质,这样的数一共有\(\phi(n)\)个,于是得证,但在\(n=1\)是要特判,于是这个式子就出来了。$$\sum_{i=1}{n}LCM(i,n)=\sum_{g=1}{n}[g \mid n]n \frac{\phi(\frac{n}{g}) \times \frac{n}{g} }{2}$$

#include<cstdio>
#include<cstdlib>
using namespace std; typedef long long ll;
#define maxn (1000010)
bool exist[maxn]; int n,phi[maxn],prime[maxn],tot; inline void ready()
{
phi[1] = 1;
for (int i = 2;i < maxn;++i)
{
if (!exist[i]) phi[i] = i-1,prime[++tot] = i;
for (int j = 1;j <= tot;++j)
{
if (i*prime[j] >= maxn) break;
exist[i*prime[j]] = true;
if (i % prime[j] == 0) { phi[i*prime[j]] = phi[i]*prime[j]; break; }
else phi[i*prime[j]] = phi[i]*phi[prime[j]];
}
}
}
inline ll calc(int g)
{
if (g == 1) return 1;
return ((ll)phi[g]*(ll)g>>1);
} int main()
{
freopen("2226.in","r",stdin);
freopen("2226.out","w",stdout);
ready();
int T; scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
ll ans = 0;
for (int g = 1;g * g <= n;++g)
if (n % g == 0)
{
ans += (ll)n*calc(n / g);
if (g * g != n) ans += (ll)n*calc(g);
}
printf("%lld\n",ans);
}
fclose(stdin); fclose(stdout);
return 0;
}

BZOJ 2226 LCMSum的更多相关文章

  1. bzoj 2226 LCMSum 欧拉函数

    2226: [Spoj 5971] LCMSum Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1123  Solved: 492[Submit][S ...

  2. BZOJ 2226 [Spoj 5971] LCMSum 最大公约数之和 | 数论

    BZOJ 2226 [Spoj 5971] LCMSum 这道题和上一道题十分类似. \[\begin{align*} \sum_{i = 1}^{n}\operatorname{LCM}(i, n) ...

  3. bzoj 2226: [Spoj 5971] LCMSum 数论

    2226: [Spoj 5971] LCMSum Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 578  Solved: 259[Submit][St ...

  4. BZOJ 2226 【SPOJ 5971】 LCMSum

    题目链接:LCMSum 这个题显然就是要我们推式子了……那么就来推一波: \begin{aligned}&\sum_{i=1}^n lcm(i,n) \\=&\sum_{i=1}^n\ ...

  5. BZOJ 2226 [Spoj 5971] LCMSum | 数论拆式子

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2226 题解: 题目要求的是Σn*i/gcd(i,n) i∈[1,n] 把n提出来变成Σi/g ...

  6. BZOJ 2226: [Spoj 5971] LCMSum 莫比乌斯反演 + 严重卡常

    Code: #pragma GCC optimize(2) #include<bits/stdc++.h> #define setIO(s) freopen(s".in" ...

  7. BZOJ 2226 [Spoj 5971] LCMSum

    题解:枚举gcd,算每个gcd对答案的贡献,贡献用到欧拉函数的一个结论 最后用nlogn预处理一下,O(1)出答案 把long long 打成int 竟然没看出来QWQ #include<ios ...

  8. 莫比乌斯反演&各种筛法

    不学莫反,不学狄卷,就不能叫学过数论 事实上大概也不是没学过吧,其实上赛季头一个月我就在学这东西,然鹅当时感觉没学透,连杜教筛复杂度都不会证明,所以现在只好重新来学一遍了(/wq 真·实现了水平的负增 ...

  9. BZOJ2226: [Spoj 5971] LCMSum

    题解: 考虑枚举gcd,然后问题转化为求<=n且与n互质的数的和. 这是有公式的f[i]=phi[i]*i/2 然后卡一卡时就可以过了. 代码: #include<cstdio> # ...

随机推荐

  1. NDK开发之JNIEnv参数详解

    即使我们Java层的函数没有参数,原生方法还是自带了两个参数,其中第一个参数就是JNIEnv. 如下: native方法: public native String stringFromC(); pu ...

  2. Android 自定义View修炼-自定义HorizontalScrollView视图实现仿ViewPager效果

    开发过程中,需要达到 HorizontalScrollView和ViewPager的效果,于是直接重写了HorizontalScrollView来达到实现ViewPager的效果. 实际效果图如下: ...

  3. Oracle11g - dos 命令 sqlplus/nolog 提示 不是内部命令解决办法

    继安装Oracle 11g后,解锁SCOtt时发现 dos 命令 sqlplus/nolog 提示 不是内部命令解决办法   通过实际验证现整理有效方法步骤如下: 步骤一:开始>>找到Or ...

  4. Andriod中WebView加载登录界面获取Cookie信息并同步保存,使第二次不用登录也可查看个人信息。

    Android使用WebView加载登录的html界面,则通过登录成功获取Cookie并同步,可以是下一次不用登录也可以查看到个人信息,注:如果初始化加载登录,可通过缓存Cookie信息来验证是否要加 ...

  5. step2 uboot tag存储主要部分代码

      cmd_bootm.c //传递给内核的参数      int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])     ...

  6. 【转】[转]order by 1是什么意思?

    [转][转]order by 1是什么意思? ORDER BY 1 表示 所select 的字段按第一个字段排序 ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字, 可 ...

  7. js--小结①

  8. 解决谷歌网站Your connection is not private问题

    google 网站打不开,总是提示 Your connection is not private 等信息,针对chrome可以通过以下方式解决: 打开链接chrome://flags. 找到quic相 ...

  9. C#DbHelperOra,Oracle数据库帮助类 (转载)

    主要功能如下数据访问抽象基础类 主要是访问Oracle数据库主要实现如下功能 .数据访问基础类(基于Oracle),主要是用来访问Oracle数据库的. .得到最大值:是否存在:是否存在(基于Orac ...

  10. js基础知识之_入门变量和运算符

    js页面效果学习 (轮播图,文字滚动效果等等) javascript能来做什么 1.数据验证 2.将动态的内容写入网页中(ajax) 3.可以对时间做出响应 4.可以读写html中的内容 5.可以检测 ...