HDU 4135 Co prime(容斥原理)

2021-09-02 14:02:09 字數 1110 閱讀 7903

題目鏈結

題意

給你三個整數a,b,c求[a,b]區間內與n互質數個數

思路
即求[a,b]區間內與n不互質數個數,即將n進行素數拆分

乙個數是某個拆分數的倍數即不互質,如wtf/素數pri 為 1到wtf間與pri不互質的個數)

素數拆分有很多,會重複計數,用容斥原理剔除。

ans = r-(l-1) - ( solve( r ) - solve( l-1 ) )

**(含兩種版本)

遞迴版

#include

#define ll long long

ll l, r, num[

100]

, len;

ll dfs

(ll n, ll x)

intmain()

}if(n >

1) num[len++

]= n;

printf

("case #%lld: %lld\n"

,ca, r-

(l-1)-

(dfs

(r,0)-

dfs(l-1,

0)))

;}return0;

}

二進位制版本
#include

#define ll long long

ll l, r, num[

100]

, len;

ll solve

(ll n)

} ans +

= tmp ? n/wtf :

-n/wtf;

}return ans;

}int

main()

}if(n >

1) num[len++

]= n;

printf

("case #%lld: %lld\n"

,ca, r-

(l-1)-

(solve

(r)-

solve

(l-1))

);}return0;

}

hdu4135 co prime 容斥原理

題意 給定a b c,求a到b區間內與c互質的數。思路 求a到b之間的與c互素的數,等價於求1到b之間與c互素的數減去1到a之間與c互素的數。求 中與 互質的數的個數都是用尤拉函式,但如果 比較大或者是求 中與 互質的數的個數等等問題,要想時間效率高的話還是先對n分解質因數然後用容斥原理,這裡可以用...

hdu 4135 Co prime 容斥原理

題目 大意 求區間 a,b 內與n互質的數的個數。分析 單純來逐個判斷互質統計結果肯定會超時,那麼可以對n素因子分解,以素因子的個數作為迴圈的上界 第二層迴圈 第一層是列舉素因子,運用容斥原理來統計不互質的個數,最後再用總數減去不互質的個數就是互質的個數。容斥原理也就是提供了這樣間接求解的思想 先不...

hdu4135Co prime 容斥原理

題意 給定a b c,求a到b區間內與c互質的數。分析 我們可以先轉化下 用 1,b 區間與n互質的數的個數減去 1,a 1 區間與n互質的數的個數,那麼現在就轉化成求 1,m 區間於n 互質的數的個數,如果要求的是 1,n 區間與n互質的數的個數的話,我們直接求出n的尤拉函式值即可,可是這裡是行不...