利用欧拉函数解决最大公约数相关问题

一、欧拉函数与最大公约数
欧拉函数phi(i)表示在[1~i)中,与i互质的数的个数。
如要求1-n中所有数与n的最大公约数的和。
设count(x)为1-n中,与n的最大公约数为x的个数,即gcb(i,n)=x,i的个数。(gcb(x,y)为x和y的最大公约数)
这个count(x)怎么求呢?
有gcb(i,n)=x,则gcb(i/x,n/x)=1,(如果为k,k!=1,则gcb(i,n)=k*x)。
则count(x)=phi(n/x)。因为这些数既然与n/x互质,则将这些数乘以x,则得到的数肯定与n最大公约数为x。
这样,我们就将n以内与n互质的数的个数(欧拉函数),转换为与n最大公约数为x的个数


二、欧拉函数与代码

在知道了欧拉函数这么强大之后,我们来看看怎么求它。
维基百科上:
则 。
例如 

你可能感兴趣的:(算法)