博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2226: [Spoj 5971] LCMSum( 数论 )
阅读量:5007 次
发布时间:2019-06-12

本文共 2012 字,大约阅读时间需要 6 分钟。

∑lcm(i,n) = ∑ i*n/(i,n) = ∑
d|n
(x,n)=d x*n/d = ∑
d|n
(t,n/d)=1
t*n = n∑
d|n
f(d). f(d)表示1~d中与d互质的数的和, 即f(d) = d*φ(d)/2(d>=2). 然后O(n)筛φ, 每次询问暴力算即可...最大是100w,sqrt(100w)=1000内的质数是168个, 所以复杂度是O(n + T*168), 可以AC

 ----------------------------------------------------------------------------------

#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 1000009;
 
bool check[maxn];
int prime[maxn], pn = 0, phi[maxn];
ll f[maxn];
 
void init() {
memset(check, 0, sizeof check);
for(int i = 2; i < maxn; i++) {
if(!check[i]) {
prime[pn++] = i;
f[i] = ll(i) * (phi[i] = i - 1) >> 1;
}
for(int j = 0; j < pn && i * prime[j] < maxn; j++) {
check[i * prime[j]] = 1;
if(i % prime[j]) {
phi[i * prime[j]] = phi[i] * (prime[j] - 1);
f[i * prime[j]] = ll(i) * prime[j] * phi[i * prime[j]] >> 1;
} else {
phi[i * prime[j]] = phi[i] * prime[j];
f[i * prime[j]] = ll(i) * prime[j] * phi[i * prime[j]] >> 1;
break;
}
}
}
}
 
void work(int n) {
if(n == 1) {
puts("1");
return;
} else if(n == 2) {
puts("4");
return;
} else if(n == 3) {
puts("12");
return;
}
ll ans = 0;
int m = (int)sqrt(n + 0.1);
for(int i = 1; i * i < n; i++) if(n % i == 0)
   ans += f[i] + f[n / i];
if(m * m == n) ans += f[m];
printf("%lld\n", ans * n);
}
 
int main() {
init(); f[1] = 1;
int T; scanf("%d", &T);
while(T--) {
int n; scanf("%d", &n);
work(n);
}
return 0;
}

----------------------------------------------------------------------------------- 

2226: [Spoj 5971] LCMSum

Time Limit: 20 Sec  
Memory Limit: 259 MB
Submit: 886  
Solved: 404
[ ][ ][ ]

Description

Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + 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

Constraints

1 <= T <= 300000
1 <= n <= 1000000

Source

 

转载于:https://www.cnblogs.com/JSZX11556/p/4776717.html

你可能感兴趣的文章
linux设备驱动程序第3版学习笔记(例程2--hellop.c)
查看>>
玩转storm
查看>>
深度优先搜索算法(DFS)以及leetCode的subsets II
查看>>
第10章 使用Apache服务部署静态网站
查看>>
关于给予webApp框架的开发工具
查看>>
c语言编写的生成泊松分布随机数
查看>>
Maven入门笔记
查看>>
算法面试通关40讲
查看>>
裸机离奇事件:Freescale usb 有关fault
查看>>
[转载]3521工程
查看>>
Python pandas ERROR 2006 (HY000): MySQL server has gone away
查看>>
Noip蒟蒻专用模板
查看>>
JAVA分词包
查看>>
iOS webView的常见属性和方法
查看>>
理解position:relative
查看>>
Codeforces Round #344 (Div. 2) Messager KMP的应用
查看>>
20145308刘昊阳 《Java程序设计》第4周学习总结
查看>>
js倒计时
查看>>
EasyUI datagrid 格式 二
查看>>
Android虹软人脸识别sdk使用工具类
查看>>