BZOJ 2705: [SDOI2012]Longge的问题

2705: [SDOI2012]Longge的问题

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 2554  Solved: 1566
[Submit][Status][Discuss]

Description

Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。

Input

一个整数,为N。

Output

一个整数,为所求的答案。

Sample Input

6

Sample Output

15

HINT

【数据范围】

对于60%的数据,0<N<=2^16。

对于100%的数据,0<N<=2^32。

Source

round1 day1

分析:

继续学数学...如果今天不GG,预计应该是高产的一天...然而题目难度2333...

根据Dirichlet卷积:id(i)=i,id=φ×1,(f×g)=Σ(d|n)f(d)*g(n/d)

Σ(1<=i<=n) gcd(i,n)

=Σ(1<=i<=n) id(gcd(i,n))

=Σ(1<=i<=n) Σ(d|gcd(i,n))φ(d)

=Σ(d|n)φ(d)*n/d

代码:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 //by NeighThorn
 7 #define int long long
 8 using namespace std;
 9 //大鹏一日同风起,扶摇直上九万里
10
11 int n,m,ans;
12
13 inline int phi(int x){
14     int cnt=x;
15     for(int i=2;i<=m;i++)
16         if(x%i==0){
17             cnt=cnt/i*(i-1);
18             while(x%i==0)
19                 x/=i;
20         }
21     if(x>1)
22         cnt=cnt/x*(x-1);
23     return cnt;
24 }
25
26 signed main(void){
27     scanf("%lld",&n);
28     m=sqrt(n);ans=0;
29     for(int i=1;i<=m;i++)
30         if(n%i==0){
31             ans+=phi(i)*n/i;
32             if(n/i>m)
33                 ans+=phi(n/i)*i;
34         }
35     printf("%lld\n",ans);
36     return 0;
37 }



by NeighThorn

时间: 2024-08-03 07:08:11

BZOJ 2705: [SDOI2012]Longge的问题的相关文章

BZOJ 2705: [SDOI2012]Longge的问题( 数论 )

---恢复内容开始--- T了一版....是因为我找质因数的姿势不对... 考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了. 但是我们可以做的更好. 注意到h(n) = ∑ d * phi(n / d) (d | n) 是狄利克雷卷积的形式, 而且f(x) = x 和 f(x) = phi(x) 都是积性函数, 所以答案h(x) 也是积性函数. 所以h(x) = Π h(p^k) (p 是 x 的质因数) 由phi(

bzoj 2705: [SDOI2012]Longge的问题 歐拉函數

2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1035  Solved: 669[Submit][Status] Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sample Input 6 Sampl

Bzoj 2705: [SDOI2012]Longge的问题 欧拉函数,数论

2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1959  Solved: 1229[Submit][Status][Discuss] Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sample Inp

BZOJ 2705: [SDOI2012]Longge的问题 GCD

2705: [SDOI2012]Longge的问题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=2705 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sam

BZOJ 2705 [SDOI2012]Longge的问题(欧拉函数)

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2705 [题目大意] 求出∑gcd(i,N)(1<=i<=N) [题解] $∑_{i=1}^{N}gcd(i,N)$ $=∑_{i=1}^{N}∑_{d|gcd(i,N)}\phi(d)$ $=∑ \phi(d)∑ _{1=<i<=N \land d|i \land d|N}1$ $=∑_{d|N}\phi(d)\lfloor\frac{i}{d}\rfloor$ [代码

BZOJ 2705 SDOI2012 Longge的问题 因数分解+欧拉函数

题目大意:给定n,求Σgcd(i,n) (1<=i<=n) n<=2^32 记fi为n的因数,则Σgcd(i,n)=Σphi(n/fi)*fi 记住分解因数和分解质数时都要用O(√n)的方法 不然准T 然后2^32-1不是质数 找质数验证的时候试试2147483647吧 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 10

BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)

题目链接 \(Description\) 求\[\sum_{i=1}^n\gcd(i,n)\] \(Solution\) \[ \begin{aligned} \sum_{i=1}^n\gcd(i,n) &=\sum_{d=1}^nd\sum_{i=1}^n[\gcd(i,n)=d]\ &=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}[\gcd(i,\lfloor\frac{n}{d}\rfloor)=1] \end{aligned

2705: [SDOI2012]Longge的问题

Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1898  Solved: 1191[Submit][Status][Discuss] Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sample Input 6 Sample Output 15 HINT

【bzoj2705】[SDOI2012]Longge的问题

2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2507  Solved: 1531[Submit][Status][Discuss] Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sample Inp