zoukankan      html  css  js  c++  java
  • 【GMOJ1164】求和

    题目

    题目链接:https://gmoj.net/senior/#main/show/1164
    给出一个正整数 (n(1leq n< 2^31)),你的任务是求出 (1~n) 中与 (n) 互质的数的总和。

    思路

    如果 (x)(n) 互质,那么显然 (n-x) 也和 (n) 互质。而这两项加起来恰好等于 (n)
    所以答案就是 (2n imes varphi(n))

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int n,m,phi;
    
    int main()
    {
    	scanf("%d",&n);
    	if (n==1) return printf("1"),0;
    	phi=m=n;
    	for (int i=2;1LL*i*i<=n;i++)
    		if (n%i==0)
    		{
    			phi=phi/i*(i-1);
    			while (n%i==0) n/=i;
    		}
    	if (n>1) phi=phi/n*(n-1);
    	printf("%lld",1LL*phi*m/2LL);
    	return 0;
    }
    
  • 相关阅读:
    AGC 014 B
    AGC 012 D
    AGC 012 C
    python
    Linux
    Linux
    Linux
    Linux 之 光标消失隐藏术
    Linux
    python
  • 原文地址:https://www.cnblogs.com/stoorz/p/13819691.html
Copyright © 2011-2022 走看看