uvaoj 11426 - GCD - Extreme (II)

题解:
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;
    }
}
阅读更多
版权声明:http://blog.csdn.net/c337134154 https://blog.csdn.net/c337134154/article/details/49948971
个人分类: Mathematics
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭