JZOJ2756. 【SDOI2012】Longge的问题

来源:互联网 发布:mac怎么删除abc输入法 编辑:程序博客网 时间:2024/06/05 15:54

题目大意

给定一个整数 N ,你需要求出 Ni=1gcd(i,N)

Data Constraint
0<N232

题解

设N的一个约数k
Ans=k(gcd(N,M)==k)
          =k(gcd(N/k,M/k)==1)
          =kphi(N/k)

SRC

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std ;typedef long long ll ;ll n , m ;ll ans ;ll phi( ll x ) {    ll ret = x ;    for (int i = 2 ; i <= m ; i ++ ) {        if ( x % i ) continue ;        ret = ret * (i - 1) / i ;        while ( x % i == 0 ) x /= i ;    }    if ( x > 1 ) ret = ret * (x - 1) / x ;    return ret ;}int main() {    scanf( "%lld" , &n ) ;    m = sqrt( n ) ;    for (int i = 1 ; i <= m ; i ++ ) {        if ( n % i ) continue ;        ans += i * phi( n / i ) ;        if ( (ll) i * i <= n ) ans += (n / i) * phi( i ) ;    }    printf( "%lld\n" , ans ) ;    return 0 ;}

以上.

1 0
原创粉丝点击