思路:

  因为当n>=1e10的时候,线性筛就不好使啦。所以要用一个公式

  φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)

  证明详见:《公式证明:欧拉函数》

  Miller-Rabin算法:

    判断某个数是否是素数,不是素数则返回一个因子。

  Pollard-Rho算法:

    利用Miller-Rabin求出 质因数。

    具体的:

      如果当前的数不是质数,找质因数 再搜Rho(n/d)和Rho(d)

      如果是质数(不一定准确),再去判断。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<vector>
#include<map>
#include<string>
#include<iomanip>
#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
#define ALL(x,S) for(x=S.begin();x!=S.end();x++)
typedef long long LL;
typedef long double real;
bool pd_prime[];
set<LL> S;
set<LL>::iterator pos;
LL n;
void prepare()
{
int i,j;
memset(pd_prime,,sizeof pd_prime);
pd_prime[]=;
for(int i=;i<=;i++)
if(pd_prime[i])
for(int j=;j<=/i;j++)
pd_prime[i*j]=;
}
void addp(LL t)
{ S.insert(t);}
LL gcd(LL a,LL b)
{
if(!b) return a;
return gcd(b,a%b);
}
LL mul(LL a,LL b,LL mod)
{
LL ans=;
while(b)
{
if(b&) ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=;
}
return ans;
}
LL pow(LL a,LL b,LL mod)
{
LL ans=;
while(b)
{
if(b&) ans=mul(ans,a,mod);
b>>=;
a=mul(a,a,mod);
}
return ans;
}
bool MR(LL n,LL k)
{
LL s=n-,w=;
while(!(s&))
w++,s>>=;
LL y=pow(k,s,n);
if(y== || y==n-)
return ;
while(w--)
{
y=mul(y,y,n);
if(y==n-)
return ;
}
return ;
}
bool prime(LL n)
{
if(n<=)
return pd_prime[n];
bool flag=;
for(int i=;i<=;i++)
if(pd_prime[i])
if(!MR(n,i)) flag=;
return flag;
}
void rho(LL n)
{
if(n==) return ;
if(n==)
{
addp();
addp();
return ;
}
if(prime(n))
{
addp(n);
return ;
}
LL x,y,d,p;
while()
{
x=,y=,d=;
p=mul(rand(),rand(),);
if(d==)
{
x=(mul(x,x,n)+p)%n;
y=(mul(y,y,n)+p)%n;
y=(mul(y,y,n)+p)%n;
d=gcd(abs(x-y),n);
}
if(d==n) continue;
rho(d);rho(n/d);
return ;
}
}
LL phi(LL x)
{
S.clear();
rho(x);
LL ans=x;
ALL(pos,S)
ans=ans/(*pos)*((*pos)-);
return ans;
}
int main()
{
freopen("phi.in","r",stdin);
freopen("phi.out","w",stdout);
prepare();
scanf("%lld",&n);
cout<<phi(n);
return ;
}

求一个极大数的欧拉函数 phi(i)的更多相关文章

  1. POJ3090 巧用欧拉函数 phi(x)

    POJ3090 给定一个坐标系范围 求不同的整数方向个数 分析: 除了三个特殊方向(y轴方向 x轴方向 (1,1)方向)其他方向的最小向量表示(x,y)必然互质 所以对欧拉函数前N项求和 乘2(关于( ...

  2. hdu 3501 Calculation 2 (欧拉函数)

    题目 题意:求小于n并且 和n不互质的数的总和. 思路:求小于n并且与n互质的数的和为:n*phi[n]/2 . 若a和n互质,n-a必定也和n互质(a<n).也就是说num必定为偶数.其中互质 ...

  3. 筛法求欧拉函数(poj2478

    求1-n的欧拉函数的值 #include <iostream> #include <cstdio> #include <queue> #include <al ...

  4. UVA10200-Prime Time/HDU2161-Primes,例题讲解,牛逼的费马小定理和欧拉函数判素数。

                                                    10200 - Prime Time 此题极坑(本菜太弱),鉴定完毕,9遍过. 题意:很简单的求一个区间 ...

  5. POJ 2480 (约数+欧拉函数)

    题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...

  6. 数论 - 欧拉函数模板题 --- poj 2407 : Relatives

    Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 Descri ...

  7. 欧拉函数 cojs 2181. 打表

    cojs 2181. 打表 ★☆   输入文件:sendtable.in   输出文件:sendtable.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 有一道比赛题 ...

  8. NOIP模拟:切蛋糕(数学欧拉函数)

    题目描述  BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段 ...

  9. 容斥原理、欧拉函数、phi

    容斥原理: 直接摘用百度词条: 也可表示为 设S为有限集, ,则 两个集合的容斥关系公式:A∪B = A+B - A∩B (∩:重合的部分) 三个集合的容斥关系公式:A∪B∪C = A+B+C - A ...

随机推荐

  1. Qt图形视图体系结构

    导读:本文主要翻译自QT 5.9.3GraphicsView官方文档 一.GraphicsView框架简介 QT4.2开始引入了Graphics View框架用来取代QT3中的Canvas模块,并作出 ...

  2. C# 深化基本概念

    关于IDisposable的Dispose方法 .Net中GC会自动回收托管资源, 对于非托管资源应该使用Dispose方法. 在使用Dispose方法时,应注意避免在Dispose内部中继续释放托管 ...

  3. POJ1511(最短路大数据处理)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 23357   Accepted: 767 ...

  4. Selenium Webdriver元素定位

    http://www.cnblogs.com/qingchunjun/p/4208159.html

  5. mysql create table

  6. 【248】◀▶IEW-Unit13

    Unit 13 Technology 流程图讲解 1.model1对应图片讲解 2.Model1范文分析 Model 1 The ice cream making process has five k ...

  7. 7.10实习培训日志-Maven 敏捷编程

    总结 今天早上主要学习了Maven和Idea的Docker插件,遇到了一些坑,对于Idea的Docker插件,不能下载,然后我去访问Idea插件官网,发现被墙了,只要开个VPN就好.下午主要是张总经理 ...

  8. iOS证书和描述文件的配置

    1.登录Apple开发者账号,进入Apple Developer主页,点击Account 2.点击Certificates,ID&Profiles 3.生成CRS文件 1.打开mac上的钥匙串 ...

  9. DSOFramer控件使用注意事项

    1.引用dll==>AxInterop.DSOFramer.dll ==>Interop.DSOFramer.dll ==>WindowsFormsIntegration ==> ...

  10. nginx是如何处理一个请求的(包含https配置)

    配置https首先要有ssl证书,这个证书目前阿里有免费的,但如果自己做实验,也是可以自签证书,只不过不受信 openssl genrsa -des3 -out server.key 1024     ...