Calculation 2-欧拉函数的运用
| Time Limit: 1000MS | Memory Limit: 32768KB | 64bit IO Format: %I64d & %I64u |
Description
Input
Output
Sample Input
3
4
0
Sample Output
0
2
欧拉函数的目的是通过某个特定的规律求出n之前与它互质的数的个数
设φ函数为欧拉函数,那么φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),当中p1, p2……pn为x的
全部质因数(这里说的质因子是种类,不是个数)(比方说12=2*2*3,它的因子都是质数)。x是不为0的整数
那么这道题目就好办了化简上述公式:假设p1....pn是x的质因数
φ(x)=x*((p1-1)/p1)((p2-1)/p2)((p3-1)/p3)((p4-1)/p4)…..((pn-1)/pn)(不用忽略前面另一个x要乘上)
如此以下的代码就是欧拉函数了接下来要说的是,假设我们知道了n之前与它互质的数的和
,那么不互质怎么求。非常easy,前n项和sum(n)=(n+1)*n/2高中的知识点;
接着(不互质的数的和)=sum(n)-(n之前与它互质的数的和)。
那怎样求n之前与它互质的数的和,首先我们应该知道一个定理就是
假设gcd(n,i)=1,那么gcd(n,n-i)=1,如此前n个数中假设i与n互质那么n-i与n也是互质的
如此来,n之前与它互质的数的和=(a1+n-a1)+(a2+n-a2)+(a3+n-a3)+(a4+n-a4)+......(an+n-an)
这不正是(有多少对i与n-i乘以n)就是结果了。而互质的个数我们
又知道了,那么有多少对就是φ(x)/2了,互质的数的和=φ(x)/2*n.
接下来(不互质的数的和)=sum(n)-(n之前与它互质的数的和)就能够求出结果
/*
Author: 2486
Memory: 1408 KB Time: 15 MS
Language: G++ Result: Accepted
VJ RunId: 4178187 Real RunId: 14209894
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
const LL mod=1000000007;
LL n;
LL getOL(LL x) {
LL res=x;
for(int i=2; i<=sqrt(x); i++) {
if(x%i==0) {
res=res/i*(i-1);
while(x%i==0) {
x/=i;
}
}
}
if(x>=2) {
res=res/x*(x-1);
}
return res;
}
int main() {
while(~scanf("%I64d",&n),n) {
LL ans1=n*(n+1)/2-n;//n前,所以n不包含在求和内
LL ans2=getOL(n)*n/2;
printf("%I64d\n",(ans1-ans2)%mod);
}
return 0;
}
Calculation 2-欧拉函数的运用的更多相关文章
- HDU3501 Calculation 2 [欧拉函数]
题目传送门 Calculation 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 3501 Calculation 2 (欧拉函数)
题目 题意:求小于n并且 和n不互质的数的总和. 思路:求小于n并且与n互质的数的和为:n*phi[n]/2 . 若a和n互质,n-a必定也和n互质(a<n).也就是说num必定为偶数.其中互质 ...
- HDU 3501 Calculation 2(欧拉函数)
Calculation 2 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- HDU 3501 Calculation 2 (欧拉函数)
题目链接 题意 : 求小于n的数中与n不互质的所有数字之和. 思路 : 欧拉函数求的是小于等于n的数中与n互质的数个数,这个题的话,先把所有的数字之和求出来,再减掉欧拉函数中所有质数之和(即为eula ...
- 欧拉函数 || Calculation 2 || HDU 3501
题面: 题解:欧拉函数的基础应用,再套个很 easy 的等差数列前 n 项和就成了. 啊,最近在补作业+准备月考+学数论,题就没怎么写,感觉菜得一匹>_< CSL加油加油~! 代码: #i ...
- 欧拉函数:HDU3501-Calculation 2
Calculation 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- hdu 3501 容斥原理或欧拉函数
Calculation 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 杭电3501Calculation 2 欧拉函数
Calculation 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
随机推荐
- APscheduler总结
APscheduler使用总结 APscheduler是执行定时任务的python库,其作用可以代替Linux系统下的crontab,github上有该库的例子. APsheduler基本使用 该模块 ...
- 多线程之:java线程创建
java中创建线程有两种方式: 1.继承Thread类,重写run()方法,如: public class MyThread extends Thread { public void run(){ S ...
- python接口自动化8-参数化【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E ...
- 在libGDX中使用Spine骨骼动画
首先,github是个宝库,实践流的读者可以直接看例子进行学习 1.这是Spine官方给出的例子 https://github.com/EsotericSoftware/spine-superspin ...
- Usage of API documented as @since 1.6+
报错:即方法是Java1.6才开始有的 File ->Project Structure->Project Settings -> Modules -> Language Le ...
- tyvj——P1001 第K极值
P1001 第K极值 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 成成第一次模拟赛 第一道 描述 给定一个长度为N(0<n<=10000)的序 ...
- 软路由OpenWrt教程收集(插件开发教程,opkg安装软件教程)
说明:现在几乎所有家庭级别的路由器都是基于OpenWrt进行衍生搭建的. https://openwrt.io/(极路由HiWifi创建的开源站点,极路由系统有这个衍生而来) http://www.o ...
- Word中设置所有西文字体为新罗马
如图所示,不用一个一个设置,在字体里直接设置细纹字体:Times New Roman ,中文字体不用管.
- 【java】java反射 Field类的研究使用
java反射 Field类的研究使用 user.getClass().getFields() 和 user.getClass().getDeclaredFields(); 的区别是什么?
- powerdesigner操作
转:http://w-tingsheng.blog.163.com/blog/static/25056034201392331452977/ 使用PowerDesigner生成数据库建表SQL脚 本时 ...