从费马小定理到欧拉定理 欧拉公式 再到欧拉函数。,。 小结一下欧拉函数吧

对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)----定义

欧拉函数的基本公式其中pi为x的素因子 。公式的推导根据欧拉公式(积性函数的性质)+算术基本定理+phi(p^k)=p^k-p^(k-1)(p为素数)

简单应用

1.hdu 2588

题意:给定N,M求gcd(i,N)>=M的i的个数(1<=i<=N,M<=N)

题解 :  对于每个i因为i<=N 所以g=gcd(N,i)一定是N的因子 ,那么我们可以枚举N的所有因子g,设theta(g)为每个因子g对应的解的集合,那么theta(g1)+theta(g2)+...theta(gn)就是我们要的最终结果。(喵的网上看了一堆评论 说的都不怎么合理,自己整理一下)对于每一个因子g,最小的满足g=gcd(i,n)的i就为g(因为g一定为n的因子),这里要求的是gcd(i,n)>=M的情况,那么gcd(i*x,n)(1<=x<=(n/i))的情况也是满足的,为了避免和其他因子枚举出的结果产生重复的结果,也就是i*x不能等于q*z,q为n的其他因子。i*x能够变成其他因子枚举结果的条件是x与(n/i)不互质(两个数不互质,说明他们有相同的数根,这里i如果乘上一个与(n/i)不互质的数,那么就会成为n的其他因子(用反证法证明:这里我们把n划为i、n/i两个部分,i乘上一个与n/i不互质的数字p=k*t,k为gcd(n/i,p),那么i*p=i*k*t,这里i*k一定为n的因子))

由于数据很大 ,我们在枚举的时候有一个小技巧,具体看代码。

ac代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
int euler(int key)// 对比较大的数 用这个方法求比较有效
{
if(key==) return ;
int temp=key;
for(int i=; i*i<=key ;i++)// 利用算术基本定理
{
if(key%i==)
{
temp=temp/i*(i-);
while(key%i==) key/=i;// 关键步骤 很有意思
}
}
if(key > ) temp=temp/key*(key-);//
return temp;
}
/*
int eu[10000];
int geteuler()// 对数据小的情况 用筛法可以有效求出多个数的euler
{
for(int i=1;i<=10000;i++) eu[i]=i;
for(int i=2;i<=10000;i++)
{
if(eu[i]==i)
{
for(int j=i;j<=10000;j++)
{
eu[j]=eu[j]/i*(i-1);
}
}
}
}
*/
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
int sum=;
for(int i=;i*i<=n;i++)// 因子总是成对出现的 我们枚举的时候 只用枚举一边就可以了
{
if(n%i==)// 是约数
{
int key=n/i;
if( i>=m ) sum+=euler(key);
if( key>=m && i*i!=n) sum+=euler(i);// 避免i*i的情况计算两次
}
}
cout<<sum<<endl;
}
return ;
}

2.hdu 3501

题意:求小于n且不与n互素的数之和

题解:有一个知识点。 当i<=n  if gcd(n,i)=1 then gcd(n,n-i)=1;

我们用  反证法来看  这个 假设gcd(n,i)=1 gcd(n,n-i)=k (k!=1) 那么就有 n%k==0 (n-i)%k==0-> n=i(mod k) 这个结论与前面gcd(n,i)=1矛盾 所以 if gcd(n,i) then gcd(n,n-i)=1。有这个结论就好解决这道题目了。我们求小于n且不于n互素的数之和,只要用小于n的数之和减去与n互素的数之和。由于和n互素的数字都是成对出现的,且和为n。

ac代码:

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const ll mod=;
ll euler(ll n)
{
ll temp=n;
for(ll i=;i*i<=n;i++)
{
if(n%i==)
{
temp=temp/i*(i-);
while(n%i==) n/=i;
}
}
if(n>) temp=temp/n*(n-);
return temp;
}
int main()
{
ll n;
while(cin>>n&&n)
{
if(n==)
{
cout<<<<endl;
continue;
}
ll temp=n*(n+)/-n;
ll zz;
zz=euler(n)/*n;
zz=(temp-zz)%mod;
if(zz<) zz+=mod;
cout<<zz<<endl;
}
return ;
}

一步一个脚印才是实实在在的进步。共勉。。。

欧拉函数小结 hdu2588+的更多相关文章

  1. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  2. hdu2588 gcd 欧拉函数

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. 【hdu-2588】GCD(容斥定理+欧拉函数+GCD()原理)

    GCD Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  4. HDU2588:GCD(欧拉函数的应用)

    题目链接:传送门 题目需求:Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.(2& ...

  5. hdu2588 GCD 给定n,m。求x属于[1,n]。有多少个x满足gcd(x,n)>=m; 容斥或者欧拉函数

    GCD Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Sub ...

  6. 欧拉函数线性求解以及莫比乌斯反演(Mobius)

    前言 咕咕了好久终于来学习莫反了 要不是不让在机房谁会发现数学一本通上有这么神奇的东西 就是没有性质的证明 然后花了两节数学课证明了一遍 舒服- 前置知识:欧拉函数,二项式定理(组合数) 会欧拉函数的 ...

  7. BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2553  Solved: 1565[Submit][ ...

  8. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  9. COGS2531. [HZOI 2016]函数的美 打表+欧拉函数

    题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...

随机推荐

  1. moveUp()

    这个函数内容有点多,想讲一下大概思路: 向上移有两种情况1.前面为空白 这种情况有两个步骤 (1)将人当前的位置设置为空白(0), (2)再讲人前面的位置设置为人(2)2.前面为箱子 当前面为箱子时有 ...

  2. springmvc源码解读(简介)

    1.客户端请求提交的DispatcherServlet 2.由DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理请求的Controller. 3.Dispa ...

  3. Golang 函数耗时统计

    当时候需要去计算一段代码或一个程序所消耗时间的时候,就需要进行统计时间,用程序去计算某一段代码的执行所需要的时间远比用眼睛直接去看程序运行时间高很多. go语言中的time包中提供了函数来提供计算消耗 ...

  4. jQuery上传文件显示进度条

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...

  5. Oracle 本地创建多个实例并创建多个监听(只能在服务端弄,不可在客户端)

    注意:监听必须在客户端创建,在客户端创建,会报错. 1.创建监听 通过 Net Configuration Assistant  创建监听,设置端口: 注意:此监听创建完后,服务列表里面并没有此服务的 ...

  6. Linux系统管理_主题02 :管好文件(1)_2.1 切换、创建和删除目录_cd_mkdir_rmdir

    用法:cd [目录路径] 变换工作目录至制定目录路径,若[目录路径]参数省略则变换至使用者的 家目录, 其中[目录路径]可为绝对路径或相对路径 另外 "~" 在 Bash 中表示当 ...

  7. Java日志体系(四)slf4j

    1.1 简介 与commons-logging相同,slf4j也是一个通用的日志接口,在程序中与其他日志框架结合使用,并对外提供服务. Simple Logging Facade for Java简称 ...

  8. Django之权限(起步)

    一. 权限概述 1. 认识权限 为什么要有权限? 因为权限让不同的用户拥有不同的功能. 权限可以对功能进行划分. 生活中处处有权限. 比如, 腾讯视频会员才有观看某个最新电影的权限, 你有房间钥匙就有 ...

  9. 计蒜客 —— 字符串p型编码

    给定一个完全由数字字符('0','1','2',…,'9')构成的字符串 strstr,请写出 strstr 的 pp 型编码串. 例如:字符串122344111可被描述为“1个 1.2 个 2.1 ...

  10. antd <BackTop>组件的使用

    <Content className={style.content} style={{ maxHeight: 'calc(100vh - 175px)',overflowY:"auto ...