题目大意:

网址:https://www.luogu.org/problemnew/show/P2303
大意:给定一个N,求\(\Sigma_{i=1}^N gcd(i, N);\)。

题目解法:

首先\(gcd(i,N)\)肯定为\(N\)的一个因子,也就是说\(gcd(i,N)\)的取值其实不多。
那么对于每一个结果分开考虑:
\(N\)唯一分解后:\(N = a_1^{k_1} \times a_2^{k_2} \times a_3^{k_3} ...\)
那么考虑一下当 \(gcd(T,N) = a\) 的时候:有\(T = R \times a\),并且\(gcd(\frac{N}{a},R) == 1\)
那么满足条件的\(R\)的个数为\(Φ(\frac{N}{a})\)个。(欧拉函数\(phi\)的定义)。
所以当 \(gcd(i,N)=a\) 时,总贡献为 \(a\timesΦ(\frac{N}{a})\)
所以我们的答案\(Ans = \Sigma_{i=1}^N([ d|N ]\times d\times Φ(\frac{N}{d}));\)
分析一下复杂度:枚举因子是\(O(\sqrt{N})\)的,求解因子的\(phi\)也是\(O(\sqrt{N})\)的。
所以理论时间复杂度为\(O(N)\),但是非常的不满(因子肯定没有\(\sqrt{N}\)个)。空间复杂度为\(O(1)\)。

具体实现代码:

#include<bits/stdc++.h>
#define ll long long
#define gi(x) scanf("%lld",&x)
using namespace std;

ll n,m,phi,Ans;
ll Eule(ll x){
    phi = x;
    for(ll e = 2;e <= sqrt(x); e ++){
        if(x%e)continue;
        while(!(x%e))x = x/e;
        phi = phi/e*(e-1);
    }
    if(x != 1)phi = phi/x*(x-1);
    return phi;
}

int main(){
    gi(n); m = sqrt(n);
    for(ll i = 1; i*i < n; i ++)
        if(!(n%i))Ans += i*Eule(n/i) + (n/i)*Eule(i);
    if(m*m==n)Ans += m*Eule(m);
    cout<<Ans;  return 0;
}

[SDOI2012]Longge的问题的更多相关文章

  1. BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2553  Solved: 1565[Submit][ ...

  2. BZOJ 2705: [SDOI2012]Longge的问题

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2554  Solved: 1566[Submit][ ...

  3. BZOJ 2705: [SDOI2012]Longge的问题 GCD

    2705: [SDOI2012]Longge的问题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...

  4. bzoj 2705: [SDOI2012]Longge的问题 歐拉函數

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1035  Solved: 669[Submit][S ...

  5. Bzoj 2705: [SDOI2012]Longge的问题 欧拉函数,数论

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1959  Solved: 1229[Submit][ ...

  6. BZOJ 2705: [SDOI2012]Longge的问题( 数论 )

    T了一版....是因为我找质因数的姿势不对... 考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了. 但是我们可以做的更好 ...

  7. 洛谷 P2303 [SDOi2012]Longge的问题 解题报告

    P2303 [SDOi2012]Longge的问题 题目背景 SDOi2012 题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数\(N\),你需要 ...

  8. BZOJ2705 SDOI2012 Longge的问题 【欧拉函数】

    BZOJ2705 SDOI2012 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, ...

  9. 【bzoj2705】[SDOI2012]Longge的问题

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2507  Solved: 1531[Submit][ ...

  10. [SDOi2012]Longge的问题 (数论)

    Luogu2303 [SDOi2012]Longge的问题 题目 题目背景 SDOi2012 题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N, ...

随机推荐

  1. jQuery smartMenu右键自定义上下文菜单插件

    http://www.zhangxinxu.com/wordpress/?p=1667 <%@ page contentType="text/html; charset=UTF-8&q ...

  2. js压缩上传图片

    初学有不当之处,请多多指点, <body> <div class="cc"> <input type="file" id=&quo ...

  3. C++ Primer Plus阅读笔记

    cin进行文本输入 使用cin获取字符的基本方式 char ch; cin >> ch; cin读取char值时将忽略空格和换行符.此外,发送给cin的输入被缓冲.这意味着只有在用户按下回 ...

  4. B站标题/子标题/url爬取示例(requests+re)

    #coding:utf-8 __author__ = "zhoumi" 3 import requests import re import urllib ''' 本文档目的在于获 ...

  5. PHP函数register_shutdown_function的用法

    register_shutdown_function这个函数是在PHP程序运行结束之前调用的,用这个函数可以做很多,比如调用运行发生致命错误中止的原因,或者调试程序的执行时间等. PHP终止的情况有哪 ...

  6. CentOS7上安装FTP服务

    ---------------------------------------------------------------------------------------------------- ...

  7. hdu1251 map水过

    更快的方法应该是字典树,不用处理前缀. AC代码: #include<iostream> #include<cstring> #include<string> #i ...

  8. nginx笔记2-负载均衡

    负载均衡实现方式分为两类:1硬件类,2软件类. 硬件类:F5(这是一种硬件,并不是刷新啊,不要误解)  优点:非常快,可靠性高,并发量大.缺点:太贵,成本高,不方便,最致命的是不能将动态请求和静态请求 ...

  9. 总结MySQL大数据量下如何进行优化

    写在建库前: 在确定数据库业务后.建立数据库表格时,就应对一些常见问题有所考虑,以避免在数据增长一段时间后再做应对,可能造成时间及维护成本增加: 数据的月增量,年增量 数据的快速增长点 是否需要触发器 ...

  10. csrf

    什么是CSRF: CSRF(Cross-site request forgery),中文名称:跨站请求伪造 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发 ...