欧拉函数

在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1,φ(8)=4(1,3,5,7))

通式:φ(n)=n*((1-1/p1)*(1-1/p2)*...(1-1/pk)),其中p1..pk是n的质因子,(如8=2*2*2,φ(8)=8*(1-1/2)= 4)

http://acm.hdu.edu.cn/showproblem.php?pid=2588

题目大意:求1~N上与N的最大公约数大于M的数X的个数(2<=N<=1000000000, 1<=M<=N)

题解:N=a*b,X=a*d  即gcd(N,X)=a ,而对于每一个a,都会有一个固定的b(因为N是确定的),而由于X<=N且gcd(N,X)=a,所以b与d互质且d<=b,也就是求与每一个a对应的每一个b互质的数d的个数,也就是通过枚举a,然后求和每个b的欧拉函数值(如果直接枚举1~N(即通过找a>=m来求和Eular(N/a)),复杂度为O(N),会TLE,而不如枚举1~sqrt(N)(通过找a>=m或者N/a>=m来求和Eular(N/a)或者Eular(a)))

1、求欧拉函数值

2、通过求满足要求的N/a和a来降低遍历枚举的复杂度(由O(N)降为O(sqrt(N)))

 

posted @ 2018-03-28 16:04  MekakuCityActor  阅读(202)  评论(0编辑  收藏  举报