题目大意:给出n,求sum foreach i(1<=i<=n) (gcd(n, i)). 1~n有太多的数,但是n与m的最大公约数却有很多重复.所以我们枚举最大公约数k,然后让k乘以与n的最大公约数为k的m的个数s[k]那就好了!但是s[k]怎么求呢?如果gcd(m,n)=k,则gcd(m/k,n/k)=1.也就是说与n最大公约数为k的m的个数就等于与n/k的最大公约数为1的个数.这可以用欧拉公式求.k从哪儿来呢?从n的约数中来. 注意:枚举约数时,枚举终点为sqrt(n),循环到i时,要记…