杭电3501Calculation 2 欧拉函数
Calculation 2
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2982    Accepted Submission(s): 1231
3
4
0
0
2
对正整数n。欧拉函数是少于或等于n的数中与n互质的数的数目。比如euler(8)=4,由于1,3,5,7均和8互质。
Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),当中p1,p2……pn为x的全部素因数。x是不为0的整数。
euler(1)=1(唯一和1互质的数就是1本身)。
欧拉公式的延伸:一个数的全部质因子之和是euler(n)*n/2。
那么怎样变成实现欧拉函数呢?以下通过两种不同的方法来实现。
第一种方法是直接依据定义来实现。同一时候第一种方法也是另外一种筛法的基础,当好好理解。
//直接求解欧拉函数
int euler(int n){ //返回euler(n)
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
} //筛选法打欧拉函数表
#define Max 1000001
int euler[Max];
void Init(){
euler[1]=1;
for(int i=2;i<Max;i++)
euler[i]=i;
for(int i=2;i<Max;i++)
if(euler[i]==i)
for(int j=i;j<Max;j+=i)
euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出
}
附ac代码:
#include<stdio.h>
int ac(__int64 n)
{
int res=n;
int a=n;
for(int i=2;i*i<=a;i++)
{
if(a%i==0)
res=res/i*(i-1);
while(a%i==0)
a/=i;
}
if(a>1)
res=res/a*(a-1);
return res;
}
int main()
{
__int64 n,m;
while(scanf("%I64d",&n),n)
{
if(n==1)
printf("0\n");
else
{
__int64 res=ac(n);
m=((n-1)*n/2-n*res/2)%1000000007;//求和公式
printf("%I64d\n",m);
}
}
return 0;
}
杭电3501Calculation 2 欧拉函数的更多相关文章
- hdu 1286:找新朋友(数论,欧拉函数)
		找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ... 
- 【欧拉函数】【HDU1286】 找新朋友
		找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ... 
- 欧拉函数之HDU1286找新朋友
		找新朋友 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ... 
- hdu 1286 找新朋友  欧拉函数模版题
		找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ... 
- 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][ ... 
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
		2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ... 
- COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
		题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ... 
- poj2478 Farey Sequence (欧拉函数)
		Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ... 
随机推荐
- 深入浅出VGA和DVI接口
			由CrazyBingo修改…… 前言:目前显示器的主流接口是VGA.DVI以及HDMI,再加上一个比较少有的Displayport接口,一共可归为四类.相信不少消费者对这些接口认识并不多,特别是普通用 ... 
- BZOJ3170: [Tjoi2013]松鼠聚会
			[传送门:BZOJ3170] 简要题意: 给出n个点的坐标,规定两个点的距离=max(|x1-x2|,|y1-y2|) 要求选出一个点,使得这个点到所有点的距离和最小 题解: 切比雪夫转换例题 将一个 ... 
- DB-MySQL:MySQL  复制表
			ylbtech-DB-MySQL:MySQL 复制表 1.返回顶部 1. MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TA ... 
- C# 遍历文件夹及子目录下所有图片.
			要求:取指定目录下面的所有图片,以表格的型式展示并显示该图片的相对路径. 服务端代码: public partial class ViewIcon : System.Web.UI.Page { JAr ... 
- 如何在ubuntu中安装mysql与mysql workbench
			安装过程如下 sudo apt-get install mysql-server 安装过程中随后设置mysql的密码 之后sudo apt-get install mysql-client 安装好之后 ... 
- HDU4920 矩阵乘法
			嗯嗯 就算是水题吧. (缩完行就15行) 题意:两个n*n的矩阵相乘(n<=800),结果对3取模 思路:先对3取模,所以两个矩阵里面会出现很多0,所以可以先枚举一个矩阵,只有当该位置不是0的时 ... 
- 在Android源码下编译jni所需要知道的事~
			以下只是自己的一些总结,欢迎讨论 通过NDK编译jni网上有很多例子,在这我只总结在Android源码下编译 1.android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK ... 
- C#中网络通信
			一.服务端代码 using System; using System.Collections.Generic; using System.Linq; using System.Net; using S ... 
- Core篇——初探Core配置管理
			文章目录 1.命令行配置 2.Json文件配置 3.配置文件文本至C#对象实例的映射 4.配置文件热更新 5.总结 命令行的配置 我们首先来创建一个.net core 的控制台项目,然后引入.net ... 
- 关于QueryRunner数据查询以及常用方法
			QueryRunner数据查询操作调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object.params)R ... 
