NC20351. [SDOI2012]LONGGE的问题
描述
输入描述
一个整数,为N。
输出描述
一个整数,为所求的答案。
示例1
输入:
6
输出:
15
C++14(g++5.4) 解法, 执行用时: 9ms, 内存消耗: 476K, 提交时间: 2019-09-16 16:19:26
#include<cstdio> #include<cmath> #define ll long long using namespace std; ll n,ans; int m; ll phi(ll x) { ll t=x; for(ll i=2;i<=m;i++) if(x%i==0) { t=t/i*(i-1); while(x%i==0)x/=i; } if(x>1)t=t/x*(x-1); return t; } int main() { scanf("%lld",&n); m=sqrt(n); for(int i=1;i<=m;i++) if(n%i==0) { ans+=(ll)i*phi(n/i); if(i*i<n)ans+=(ll)(n/i)*phi(i); } printf("%lld",ans); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-08-14 14:12:11
#include<cstdio> using namespace std; typedef long long ll; int main(){ ll n, ans, j, i, k; scanf("%lld", &n); for(i = 2, ans = 1;i <= n / i;i++){ for(j = 1, k = 0;!(n % i);n /= i, j *= i, k++); ans *= j + j / i * (i - 1) * k; }if(n > 1)ans *= 2 * n - 1; printf("%lld", ans); return 0; }