zoukankan      html  css  js  c++  java
  • 最大公约数和

    题面

    所以给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)
    N<=MAXINT

    Sol

    式子就是(sum_{d|N}d*phi(N/d))
    没了

    # include <bits/stdc++.h>
    # define RG register
    # define IL inline
    # define Fill(a, b) memset(a, b, sizeof(a))
    using namespace std;
    typedef long long ll;
    const int _(1e7 + 1);
    
    IL ll Read(){
        char c = '%'; ll x = 0, z = 1;
        for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;
        for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
        return x * z;
    }
    
    IL ll Phi(RG ll x){
    	RG ll cnt = x;
    	for(RG ll i = 2; i <= x; ++i){
    		if(x % i) continue;
    		while(x % i == 0) x /= i;
    		cnt -= cnt / i;
    	}
    	if(x > 1) cnt -= cnt / x;
    	return cnt;
    }
    
    int main(RG int argc, RG char *argv[]){
    	RG ll n = Read(), ans = 0, m = sqrt(n);
    	for(RG ll i = 1; i <= m; ++i){
    		if(n % i) continue;
    		ans += 1LL * i * Phi(n / i);
    		if(i * i != n) ans += 1LL * (n / i) * Phi(i);
    	}
    	printf("%lld
    ", ans);
    	return 0;
    }
    
    
  • 相关阅读:
    【待整理】转义字符
    关系运算符 与 逻辑运算符
    浏览器相关
    正则表达式
    样式定义——多重浏览器
    事件
    属性定义
    数组
    日期
    构造函数
  • 原文地址:https://www.cnblogs.com/cjoieryl/p/8261045.html
Copyright © 2011-2022 走看看