hdu 4135 Co-prime(容斥原理)
求連續區間[a,b]內與n互質的數的個數。
因為a,b相當大,考慮用容斥原理。只需先求出[a,b]內與n不互質的數的個數,等於[1,b]內與n不互質的個數 - [1,a-1]內與n不互質的個數。問題轉化為求【1,m】內與n不互質的數的個數。
先對n分解質因子,[1,m]內是n的質因子的倍數的那些數肯定與n不互質,但是有許多重復的,需要減去。質因子解法有多種,隊列數組或狀態壓縮。
例如30的質因子是2,3,5,[1,m]內與30互質的數的個數表示為 n/2 + n/3 + n/5 - n/(2*3) - n/(2*5) - n/(3*5) + n/(2*3*5)。發現質因子個數是奇數的做加法,是偶數的做減法。隊列數組解法為模擬一個隊列,初始將1加入隊列,之後每次取出n的一個質因子依次與隊列中的數相乘後置於隊尾,每次乘-1決定其前面的正負號。最後隊列裡的就是上式所有的分子,然後解之。 狀態壓縮便是將取出的質因子置為1沒取出的置為0,得到一個數res,若res的質因子個數是奇數就加上,是偶數就減,求和就是與m不互素的數的個數,解之。
#include
#include
#include