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. 标准库function类型的使用

    14.44编写一个简单的桌面计算器使其能处理二元运算. #include<iostream> #include<map> #include<functional> ...

  2. hibernate.hbm.xml配置文件内容说明

    下面是一个自动生成的配置文件: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PU ...

  3. 分分钟解决iOS开发中App启动广告的功能

    前不久有朋友需要一个启动广告的功能,我说网上有挺多的,他说,看的不是很理想.想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏 ...

  4. 也许是关于C#的一些常见误区

    写这点东西主要是看到知乎上有人在讨论相关的问题,但是有不少人都在说一些不严谨,甚至是完全错误 但是流传甚广的东西,甚至是一些大神都在说,以下根据我的回答总结.    一个很常见又很低级的误区是:认为引 ...

  5. 从源码角度深入理解Handler

    为了获得良好的用户体验,Android不允许开发者在UI线程中调用耗时操作,否则会报ANR异常,很多时候,比如我们要去网络请求数据,或者遍历本地文件夹都需要我们在新线程中来完成,新线程中不能更新UI, ...

  6. Oracle 插入数据效率对比

    oracle插入数据有多种方式: 将从多个表中查出来的数据插入到临时表中 数据行数 5189597 1.传统方式:直接将数据插入到表中 insert into LLB_BASIC_USER_D_TEM ...

  7. 利用AWS简单存储服务(S3)托管网站

    1.首先建立Storage Bucket存储桶,名为网站域名: 2.在[属性]中选择启用网站托管或重定向到另一主机,即可. 3.官方参考文档:https://docs.aws.amazon.com/z ...

  8. spring 3.1.4 升 4.0.2

          来自为知笔记(Wiz)

  9. java Date日期去掉时分秒

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String s = sdf.format(new Date() ...

  10. 第一篇:杂项之pymysql连接池

    杂项之pymysql连接池   杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普 ...