欧拉函数 因子分解 TOJ 2918 LCM Revisited---
来源:互联网 发布:生物多样性保护网络 编辑:程序博客网 时间:2024/06/05 00:10
题意
给出一个整数N
思路
范围比较大, 直接 求的话,肯定会超时,反向来求,只需要求出不满足条件的个数,然后用N减,即可。 很显然, 有下面两类数不满足条件:
1. 与N 互质
2. 是N的因子
接下来分别求出这两类即可。
与N互质
求比N小的与N互质的个数,可以想到用 欧拉函数。
在数论,对正整数n,欧拉函数 φ(n)是少于或等于n的数中与n互质的数的数目。
φ(n)=n∗p1−1p1∗p2−1p2∗…∗pn−1pn , 其中pi 是N 的质因子。这里包含 1
一般求解欧拉函数的代码:
int eular(int n){ int eul=n; for(int i=2; i*i<=n; i++)//数字比较大,i*i 超范围,可以long long { if(n%i==0) { eul=eul/i*(i-1); //计算欧拉函数,这里i 就是质因子了 while(n%i==0)n/=i; } } if(n>1) eul=elu/n*(n-1); return eul;}
求N的因子的个数
求因子个数可以用下面的公式:
设
N=pa11∗pa22∗…∗pann , 则N的因子个数:
f(N)=(a1+1)∗(a2+1)∗…∗(an+1)
其中pi 是 N 的质因子。
ok,到这里两部分都已经解决了, 不过如果两个都分开求,很不幸的–TLE,
通过观察可以知道, 在用欧拉函数求互质个数,以及求N 的因子个数的时候,我们都用到了 N 的质因子。 因此我们可以考虑,提前将N
的质因子打表保存,供两个调用。而N 的上限是
另外: 再求N 的质因子个的时候,还需要求出每个质因子的次数。详见代码:
代码
/*Accepted 2918 C++ 0.8K 0'00.04" */#include <stdio.h>//pr标记素数, p存贮质因子,num存储质因子次数。int pr[65540],p[300],num[300],k,n;void prim()//将65536以内的素数,打表存储{ pr[0]=pr[1]=pr[2]=0; for(int i=2;i<=65536;i++) if(pr[i]==0) { for(int j=i+i;j<=65536;j+=i) pr[j]=1; }}void factor(int n){ k=0; for(long long i=2;i*i<=n;i++)// 这里必须是longlong 否则i*i 超int { if(!pr[i]&&n%i==0) {//质因子 num[k]=0; while(n%i==0) num[k]++,n/=i; p[k++]=i;//存储质因子 } } if(n>1) { p[k]=n; num[k++]=1; }}int res(){ int res=n,sum=1; for(int i=0;i<k;i++){ res=res/p[i]*(p[i]-1);// 欧拉函数 sum*=(num[i]+1); // 求因子个数 } return res+sum;}int main(){ prim(); while(scanf("%d",&n)&&n) { factor(n); printf("%d\n",n-res()+1);// 因为两个重复包含了1, 因此需要+1 }}
0 0
- 欧拉函数 因子分解 TOJ 2918 LCM Revisited---
- 筛法求素数+分解质因子+欧拉函数+求约数
- POJ1845 Sumdiv 费马小定理+欧拉函数+素因子分解
- SPOJ-NUMTRYE 质因子分解 + 欧拉函数应用
- Pairs Forming LCM(素因子分解+lcm)
- poj_2480 Longge's problem(素因子分解+积性函数+欧拉phi函数)
- BZOJ 4802 欧拉函数(素数判定Miller-Rabin+素因子分解Pollard-rho+欧拉函数)
- hdu GCD 【欧拉函数,素因子分解,筛选法,容斥原理】
- HDU 1695 GCD(素因子分解+容斥原理+欧拉函数)
- hdu 1695 GCD (欧拉函数+容斥原理+素因子分解)
- Pollard的rho启发式因子分解算法 & [CodeVS 4939] 欧拉函数:Miller-Rabin + Pollard-rho 质因数分解
- UVA10892 - LCM Cardinality(分解质因子)
- UVA 10892 LCM Cardinality (因子分解 水题)
- LightOJ1236 Pairs Forming LCM 素因子分解
- 【欧拉函数】 TOJ 4125. Game
- 分解质因数 欧拉函数
- hdu1695 综合数论 欧拉函数 分解质因子 容斥原理 打印素数表 各种模板
- 数论之 素因子分解,素数筛选法,欧拉函数和扩展欧几里得算法 (整理)
- java枚举变量
- 【Jsoup学习礼记】从一个文件加载一个文档
- 基于WinCE的步进电机驱动程序设计
- PAT 1009. Product of Polynomials (25)
- Ubuntu adb devices :???????????? no permissions
- 欧拉函数 因子分解 TOJ 2918 LCM Revisited---
- spring mvc 上传文件进度条
- visual studio 2013 编译 filezilla和filezilla server
- hadoop中mapred.tasktracker.map.tasks.maximum的设置
- VC托盘程序
- jstl与el表达式 和面向对象
- OpenCv轮廓高级应用(轮廓匹配,几何直方图)
- Java集合学习笔记
- BroadcastReceiver 的基本使用方法