POJ 2407 Relatives C++版
题目链接:http://poj.org/problem?id=1048
题意,求小于n的数中和n互质的数的个数!
这题,我先开始的思路是针对每个小于n的数求最大公约数,但是用辗转相除法,递归层数过高!后来想开个数组,标记互质的数,但是n太大,无法开出来,搜索了一下,有一个函数,是用来解决这一问题的,就是欧拉函数,我参看维基百科,写出算法!
欧拉函数的求解,可以简化为,将n写成a1^n1a2^n2….an^nn的形式,那么这个数的欧拉函数表达式为a1^(n1-1)(a1-1) * a1^(n2-1)*(a1-1)….
还不懂的去看看维基百科!
代码如下:
1 | /*Problem: 2407 User: awq123 |