uvaoj 11426 - GCD - Extreme (II)

来源:互联网 发布:桌面数据库 编辑:程序博客网 时间:2024/04/30 13:40

题解:
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 4000010int 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;    }}
2 0
原创粉丝点击