POJ_2480 Longge's problem【积性函数+欧拉函数的理解与应用】
题目:
"Oh, I know, I know!" Longge shouts! But do you know? Please solve it.
Input
A number N per line.
Output
Sample Input
2
6
Sample Output
3
15
题意分析:
做这题前,首先要对两个概念有一定的理解,积性函数和欧拉函数,浅层次的了解是无法推导出最终答案的,只有深入理解。(这完全是屁话- -!)
分析gcd是积性函数,当a,b互质时,易证
这样,我们也可以得出
也是积性函数。
然后我们分析N,如果一个数t,它与N的最大公约数2,即gcd(t,N)=2.那么我们可以得出
有没有发现什么,如果没有,回想欧拉函数的性质φ(N/2)的意义是不超过N/2的所有与N/2互素的数的数量。而这些与N/2互素的数字其实就是所有满足上述条件的t/2,再结合题目,那么φ(N/2)就是所有满足gcd(i,N)=2条件的数的数目。再乘以2就是这些数的和。3, 4, 5, ……依此类推。
现在我们往特殊的情况考虑,假设N是素数p。则
那么当N为p^r次方时,N的与i的最大公约数的值可能有1,p,p^2,……,p^r.
思路有没有变明朗呢?如果没有,那只能原谅我语文确实是体育老师教的。QAQ
直接拿出大招搞事了。
根据上述的公式,然后结合当为奇数次幂时的欧拉函数公式,直接推出
不得不吐槽下自己,自己在写代码时,因为装*,这个式子我又转换了一下,结果一直WA。看来还是要一步一步来啊。
接下来,玩玩拆数字游戏了,根据素数分解,把N分解成素数分解成素数幂相乘,再根据积性函数性质+上述推导的公式,最终结果就是答案了。写的时候注意下控制long long就可以了。
终于over了。
可以用素数打表再写(47ms),但是估计数据不多,直接试除速度更快(32ms)。
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL; void solve(LL N)
{
LL ans = 1;
for(LL i = 2; i*i <= N; i++)
{
if(N%i==0)
{
LL r = 0;
LL t = 1;
do
{
N/=i;
r++;
t*=i;
}while(N%i==0);
ans*=(r + 1) * t - t / i * r;
}
}
if(N>1)
{
ans*=2*N-1;
}
printf("%I64d\n", ans);
} int main()
{
LL N;
while(scanf("%I64d", &N) != EOF)
{
solve(N);
}
return 0;
}
最新文章
- 配置Samba共享服务器
- 带着问题学 Spring MVC 源码: 一、概述
- 我的电脑右下角的日期也不见了只剩下时间,Win7系统,请问是什么原因啊?
- objectARX判断当前坐标系
- @property @synthesize的含义以及误区。
- hdoj 5301 Buildings
- postgres 约束 多个条件 联合 约束
- android camera(三):camera V4L2 FIMC
- IP 转地址
- How to Avoid Producing Legacy Code at the Speed of Typing
- 详解Linq to SQL
- Linux 中 java 访问 windows共享目录
- Java 后端微信支付demo
- 用UIWebView加载本地图片和gif图
- iOS开发中的小技巧 - 多张图合成一张
- 优化网站设计(九):减少DNS查找的次数
- python low版线程池
- hibench 对CDH5.13.1进行基准测试(测试项目hadoop\spark\)HDFS作HA高可靠性
- vue-resource获取不了数据,和ajax的区别,及vue-resource用法
- MediaPlayer音乐播放器、上一首、下一首、播放、停止、自动下一首、进度条
热门文章
- LoadRunner Controller
- 409. Longest Palindrome 最长对称串
- 557. Reverse Words in a String III 翻转句子中的每一个单词
- mybatis 框架 的应用之三(操作两张没有关联的表,存在主键和外键关系)
- vmware 安装不成功导致的问题解决以及右键菜单添加打开终端命令
- linux ssh使用深度解析(key登录详解)
- mysql导入导出文本文件
- [GO]数组指针做函数参数
- New for ASP.NET Web Pages: Conditional attributes
- Orace开源的异步IO编程库,特点是接口非常简单