当前位置: 首页 > news >正文

【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)

题目链接
题意:求\(\sum_{i=1}^{n}\gcd(i,n)\)

首先可以肯定,\(\gcd(i,n)|n\)

所以设\(t(x)\)表示\(gcd(i,n)=x\)\(i\)的个数。

那么答案很显然就是\(\sum_{d|n}t(d)*d\)

那么\(t(x)\)怎么求呢。

\[t(x)=\sum_{i=1}^{n}[\gcd(i,n)=x]\]
因为若\(\gcd(x,y)=1\),则有\(\gcd(xk,yk)=k\)
所以
\[t(x)=\sum_{i=1}^{n}[\gcd(i,n)=x]=\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}[\gcd(i,\lfloor\frac{n}{x}\rfloor)=1]=\phi(\lfloor\frac{n}{x}\rfloor)\]
所以最终答案就是\(\sum_{d|n}[\phi(\lfloor\frac{n}{d}\rfloor)*d]\)

我们可以在\(O(\sqrt n)\)的时间复杂度内求出\(n\)的所有约数,约数个数是\(\log n\)级别的,求\(\phi\)\(O(\sqrt n)\)的时间复杂度,所以总时间复杂度\(O(\log n\sqrt n)\)

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

转载于:https://www.cnblogs.com/Qihoo360/p/9777286.html

相关文章:

  • 【iOS-cocos2d-X 游戏开发之十六】Cocos2dx编译后的Android自动使用(-hd)高清图设置自适应屏幕...
  • 了解一下ES6: let const
  • 【斗医】【12】Web应用开发20天
  • WCF和IIS宿主的ASP.NET 共享会话
  • ORDER BY,GROUP BY 和DI STI NCT 优化
  • JS中字符串转义
  • 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
  • ORA-00119: invalid specification for system parameter LOCAL_LISTENER;
  • Mybatis介绍
  • USB数据采集卡:labjack T7、T7 Pro系列的技术特点
  • Mocha测试初探
  • 在线修改ha.proxy配置文件
  • BZOJ 4016: [FJOI2014]最短路径树问题
  • Flask的sqlalchemy SQL练习
  • js通过按钮直接把input或者textarea里的值复制到粘贴板里
  • Android优雅地处理按钮重复点击
  • Angular4 模板式表单用法以及验证
  • CentOS6 编译安装 redis-3.2.3
  • C学习-枚举(九)
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • js操作时间(持续更新)
  • JS实现简单的MVC模式开发小游戏
  • Spring Boot快速入门(一):Hello Spring Boot
  • 工作中总结前端开发流程--vue项目
  • 今年的LC3大会没了?
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 人脸识别最新开发经验demo
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用common-codec进行md5加密
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 与 ConTeXt MkIV 官方文档的接驳
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (ibm)Java 语言的 XPath API
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)linux 命令大全
  • (转)关于pipe()的详细解析
  • (转载)利用webkit抓取动态网页和链接
  • .apk文件,IIS不支持下载解决
  • .Net 4.0并行库实用性演练
  • .NET Core Web APi类库如何内嵌运行?
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net Remoting常用部署结构
  • .Net Web窗口页属性
  • .net分布式压力测试工具(Beetle.DT)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET开发者必备的11款免费工具
  • @AliasFor注解
  • @ModelAttribute使用详解
  • @Transient注解