【BZOJ】【2705】【SDOI2012】Longge的问题
欧拉函数/狄利克雷卷积/积性函数
2705: [SDOI2012]Longge的问题
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 1275 Solved: 820
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
【数据范围】
对于60%的数据,0<N<=2^16。
对于100%的数据,0<N<=2^32。
Source
掉到莫比乌斯反演的坑里无法自拔,问了zyf&在网上看了题解才做出来TAT……我果然好弱
这个题是要求$\sum_{x=1}^{n}gcd(x,n)$,考虑它的实际意义,我们可以得到$ans=\sum_{i|n}i*\varphi(\frac{n}{i})$
但是明显φ函数我们是没法预处理的……($\frac{n}{i}$这玩意太大了),但考虑到n的约数不会太多,所以我们可以边找因数边计算φ。
/**************************************************************
Problem: 2705
User: Tunix
Language: C++
Result: Accepted
Time:16 ms
Memory:804 kb
****************************************************************/ //BZOJ 2705
#include<cmath>
#include<cstdio>
#define F(i,j,n) for(int i=j;i<=n;i++)
typedef long long LL;
LL phi(LL n){
int ret=,i;
for(int i=;i*i<=n;i++){
if (n%i==){
n/=i; ret*=i-;
while(n%i==) n/=i,ret*=i;
}
}
if (n>) ret*=n-;
return ret;
}
int main(){
int n;
scanf("%d",&n);
long long ans=;
for(int i=;i*i<=n;i++)
if(n%i==){
ans+=(LL)i*phi(n/i);
if (i*i<n) ans+=(LL)n/i*phi(i);
}
printf("%lld\n",ans);
return ;
}
但是其实对于这个函数$\sum_{i|n} i*\varphi(\frac{n}{i})$是满足积性的,因为它就是$id(x)=x$和$\varphi(x)$这两个函数的狄利克雷卷积,那么……(贴个网上的图片)

/**************************************************************
Problem: 2705
User: Tunix
Language: C++
Result: Accepted
Time:8 ms
Memory:816 kb
****************************************************************/ //BZOJ 2705
#include<cmath>
#include<cstdio>
#define F(i,j,n) for(int i=j;i<=n;i++)
int main(){
int n;
scanf("%d",&n);
long long ans=n;
F(i,,sqrt(n)){
if(n%i==){
int k=;
for(k;n%i==;k++,n/=i);
ans+=ans*(i-)*k/i;
}
}
if (n!=) ans+=ans*(n-)*/n;
printf("%lld\n",ans);
return ;
}
(诡异的加法版本)
P.S.但是这个【乘起来】的过程我在网上没找到啊……写法好诡异我理解不了……所以我机(sha)智(bi)地改了一个利用快速幂的版本= =耗时居然一样……如果有哪位路过的大牛搞明白了前面那个加法版本的意思的话请留言教我一下,万分感谢。
/**************************************************************
Problem: 2705
User: Tunix
Language: C++
Result: Accepted
Time:8 ms
Memory:816 kb
****************************************************************/ //BZOJ 2705
#include<cmath>
#include<cstdio>
#define F(i,j,n) for(int i=j;i<=n;i++)
typedef long long LL;
LL Pow(LL a,LL b){
LL r=;
for(;b;b>>=,a*=a)if(b&)r*=a;
return r;
}
int main(){
int n;
scanf("%d",&n);
LL ans=;
F(i,,sqrt(n)){
if(n%i==){
int k=;
for(k;n%i==;k++,n/=i);
ans*=(k+)*Pow(i,k)-k*Pow(i,k-);
// ans+=ans*(i-1)*k/i;
}
}
if (n!=) ans*=*Pow(n,)-;
printf("%lld\n",ans);
return ;
}
(乘法版本)
【BZOJ】【2705】【SDOI2012】Longge的问题的更多相关文章
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
- BZOJ 2705: [SDOI2012]Longge的问题
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2554 Solved: 1566[Submit][ ...
- BZOJ 2705: [SDOI2012]Longge的问题 GCD
2705: [SDOI2012]Longge的问题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...
- bzoj 2705: [SDOI2012]Longge的问题 歐拉函數
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1035 Solved: 669[Submit][S ...
- Bzoj 2705: [SDOI2012]Longge的问题 欧拉函数,数论
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1959 Solved: 1229[Submit][ ...
- BZOJ 2705: [SDOI2012]Longge的问题( 数论 )
T了一版....是因为我找质因数的姿势不对... 考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了. 但是我们可以做的更好 ...
- [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]
[bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...
- bzoj 2705: [SDOI2012]Longge的问题——欧拉定理
Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一 ...
- BZOJ 2705 [SDOI2012]Longge的问题(欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2705 [题目大意] 求出∑gcd(i,N)(1<=i<=N) [题解] $ ...
- [bzoj 2705][SDOI2012]Longge的问题(数学)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2705 分析: 设k为n的因数 设f[k]为gcd(x,n)==k的x的个数,容易知道a ...
随机推荐
- 三、MongoDB的创建、更新和删除
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D( ...
- asp.net读取excel文件多种方法
asp.net读取excel文件的三种方法示例,包括采用OleDB读取Excel文件.引用的com组件读取Excel文件.用文件流读取. 方法一:采用OleDB读取Excel文件 把Excel文件 ...
- windows下编译lua源码
所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的.而且lua越做越精简了,5.1的版本里面还有一些te ...
- SQLServer2005中查询语句的执行顺序
SQLServer2005中查询语句的执行顺序 --1.from--2.on--3.outer(join)--4.where--5.group by--6.cube|rollup--7.havin ...
- linuxok6410的I2C驱动分析---用户态驱动
3 i2c-dev 3.1 概述 之前在介绍I2C子系统时,提到过使用i2c-dev.c文件在应用程序中实现我们的I2C从设备驱动.不过,它实现的是一个虚拟,临时的i2c_client,随着设备文件 ...
- psql: 致命错误: 用户 "postgres" Ident 认证失败
RedHat: 问题: psql -U postgres 时出现:psql: 致命错误: 用户 "postgres" Ident 认证失败 解决: 修改 /var/lib/pgs ...
- WPF学习03:Element Binding
元素绑定是数据绑定的一个子集,关于数据绑定是什么,园子里有很多文章都说得非常好,在此不予详细说明. WPF实现了完善的数据绑定机制,使得元素绑定有简易的实现步骤. 本文的元素指的是WPF中的可视控件. ...
- 禁止生成文件Thumbs.db
Thumbs.db是一个用于Microsoft Windows XP.Windows7 或 mac os x缓存Windows Explorer的缩略图的文件.Thumbs.db保存在每一个包含图片或 ...
- .NET开源工作流RoadFlow-流程设计-保存与发布
如果流程未设计完时可以先保存,以后再打开接着设计.点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计,则可以打开该流程继续设计: 如果流程设计完成,可以点击安装按钮来发布流程,流程安装成 ...
- 反射 reflect 初始学习
类也是对象,本身是java.lang.Class 类的对象. Class的三种表示方式: 1.Class a = A.class: 类名.class的方式.经常在日志记录里面,获取当前类的日志记录生成 ...