uvaoj 11426 - GCD - Extreme (II)
2015-11-20 16:49
405 查看
题解:
1.g(n,i)(i < n)含义是小于n的数中与n最大公约数为i的数量
2.g(n,i) = phi(n / i)
总结:
1.这道题目也没有自己做出来,貌似最近好多问题都没有自己做出来了,跟最近学习方法也有一些关系吧
2.这道题,解题的关键之处我认为在于找到g(n,i)这个表达式,那么如何才能想到呢
3.嗯,如果按照题目的思路就是:gcd(n,m) = i,枚举n,m但是复杂度太高 -> 但是如果我们枚举n和i呢。
4.感觉很多时候躺在床上想题,还是会有一些遗漏,想问题还是要先写在纸上,然后把所有已知条件列出来,然后找到一些可能求解的方法,如果实在想不出来了,陷入死胡同了,往往休息一下,躺在床上,也许能够跳出循环,想到解题方法。
5.时间安排!一定要分片处理,没科目学一小时,然后休息会,休息的时候最好溜达会,然后学会英语。这样效率才能提高!时间分片
1.g(n,i)(i < n)含义是小于n的数中与n最大公约数为i的数量
2.g(n,i) = phi(n / i)
总结:
1.这道题目也没有自己做出来,貌似最近好多问题都没有自己做出来了,跟最近学习方法也有一些关系吧
2.这道题,解题的关键之处我认为在于找到g(n,i)这个表达式,那么如何才能想到呢
3.嗯,如果按照题目的思路就是:gcd(n,m) = i,枚举n,m但是复杂度太高 -> 但是如果我们枚举n和i呢。
4.感觉很多时候躺在床上想题,还是会有一些遗漏,想问题还是要先写在纸上,然后把所有已知条件列出来,然后找到一些可能求解的方法,如果实在想不出来了,陷入死胡同了,往往休息一下,躺在床上,也许能够跳出循环,想到解题方法。
5.时间安排!一定要分片处理,没科目学一小时,然后休息会,休息的时候最好溜达会,然后学会英语。这样效率才能提高!时间分片
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MAXN 4000010 int phi[MAXN]; void phi_table() { phi[1] = 1; for(int i = 2;i < MAXN;i++)if(!phi[i]) { phi[i] = i - 1; for(int j = i * 2;j < MAXN;j += i) { if(!phi[j])phi[j] = j; phi[j] = phi[j] / i * (i - 1); } } } int main() { phi_table(); int n; while(cin >> n && n) { long long ans = 0; for(long long i = 2;i <= n;i++) { long long cur = n / i; ans += phi[i] * ((1 + cur) * cur / 2); } cout << ans << endl; } }
相关文章推荐
- gcd
- OC多线程
- 多线程应该知道的那几件事 GCD NSThread NSOperation
- 多线程编程4 - GCD
- 多线程学习资源
- block && Grand Central Dispatch
- GCD使用指南
- 2分钟学会GCD
- Problem 1612 Hero's gcd
- 使用GCD
- GCD学习 dispatch_barrier_async
- hdu1452因子和的积性函数
- hdu1852
- 计算两个数的最大公约数 gcd(a,b)
- 模运算相关数论知识
- The greatest common divisor gcd(最大公约数)
- Grand Central Dispatch (GCD) dispatch queues 无废话上手
- GCD 学习
- GCD介绍
- iOS的定时器用法