您的位置:首页 > 其它

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.时间安排!一定要分片处理,没科目学一小时,然后休息会,休息的时候最好溜达会,然后学会英语。这样效率才能提高!时间分片

#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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息