SPOJ 5971 LCM SUM
来源:互联网 发布:mpp文件打开软件 编辑:程序博客网 时间:2024/05/19 17:49
写完这题,就可以去写 Light OJ 1375了
题意:
求
∑i=1i=n LCM(i,n)
1≤T≤300000 1≤n≤106
思路:
LCM(i,n)=i∗ngcd(i,n)
令g=gcd(i,n) , 得到:
lcm(i,n)=ig∗ng∗g
我们可以枚举g=gcd(i,n) 的值,显然这个值一定是n 的约数,那么现在开始算n∗ig ,对于这个g 值下进行求和,又因为i 满足条件g=gcd(i,n) , 所以明显所有的ig 与ng 互质,然后进行求和的时候就可以用到一个结论:
对于2≤n , 不大于n 且与n 互质的整数的和为n∗phi(n)2 ,那么我们要求的和值就是等于n∗n/g∗phi(n/g)2 , 所以ans=n+n∗∑d|n,d!=n n/d∗phi(n/d)2=n+n∗∑d|n,d!=1 d∗phi(d)2
注意,这里要特殊处理一下g=n 哦!
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#define PB push_back#define FT first#define SD second#define MP make_pair#define INF 0x3f3f3f3fusing namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> P;const int N = 5 + 1e6, MOD = 7+1e9;LL ans[N], phi[N];bool flag[N];int prime[N/3];int p[10000];void init() { int i, j, k; k = 0; for(i = 2;i < N;++ i) { if(!flag[i]) { prime[k++] = i; phi[i] = i-1; } for(j = 0;j < k && i * prime[j] < N;++ j){ flag[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] * (prime[j] - 1); } } for (int i = 1; i < N ; ++ i) { for(int j = i;j < N;j += i) { ans[j] += 1LL* i * phi[i] /2; } }}int main(){ init(); int T; scanf("%d",&T); while(T --) { int n; scanf("%d",&n); printf("%lld\n",(ans[n] + 1) * n); } return 0;}
0 0
- SPOJ 5971 lcm sum
- SPOJ 5971 LCM SUM
- spoj LCM Sum
- 【SPOJ】【P5971】【LCM Sum】【题解】【数论】
- SPOJ 5971 LCM Sum 欧拉函数 (或 莫比乌斯反演?)
- SPOJ LCM Sum(积性函数递推+预处理)
- 10791 - Minimum Sum LCM
- uva10791 - Minimum Sum LCM
- 10791 - Minimum Sum LCM
- UVaOJ10791 - Minimum Sum LCM
- Minimum Sum LCM
- UVA10791- Minimum Sum LCM
- UVA10791----Minimum Sum LCM
- uva10791 Minimum Sum LCM
- 10791 - Minimum Sum LCM
- uva10791 Minimum Sum LCM
- spoj5971 LCM Sum
- uva10791 Minimum Sum LCM
- IOS 触摸事件
- 194. Transpose File
- 单调递增子序列(二)(nyoj214)
- Intellij Idea 使用笔记
- 获取字符数方法
- SPOJ 5971 LCM SUM
- 项目实施中CRP的含义,以及各个阶段
- 责任链模式(java语言实现)
- javaweb基于内容的图片搜索引擎(4)_前台检索以及结果
- vertical-align: middle垂直居中
- web开发中表单的验证问题
- 【静下心学习Unity】学习笔记 (三)Unity Physics - Hinge Joint(铰链关节) 实现门的功能
- popupwindow的学习
- Maven学习记录(一)--IDEA下环境配置