POJ 1091 跳蚤 容斥原理 數論

2021-10-01 15:02:20 字數 1118 閱讀 7975

題目大意:中文題意,不多贅述

題目分析:根據題目的意思,其實只需要讓所有數的最大公約數為1就可以滿足條件,好像是用到了歐幾里得的一些知識,奈何我的數論比較菜,也不會證明,就直接用網上大牛們的結論吧,題目說了第n+1個數已經幫我們選好了,為m,所以我們只需要找出有多少種情況選擇n個與m互質的數就是題目所求了,不過正難則反,我們可以求有多少組數與m是有不互質的,用總數減去當前答案數就是最後要求的最終答案了,這樣問題就轉換為了求1~m中有多少個數與n互質,不過這個題目稍微有一點點的變化就是並不是直接詢問的個數,而是排列組合數,給出的n就是起到了這個用處,因為對於1~m中的任意乙個數x,其都可以在n個位置出現,所以總的方案數為m^n,而每次需要操作的答案也是需要加乙個n次冪就好了,舉個很簡單的例子想一下,比如現在我們需要求與m的公因子p不互斥的數有num個,求出這個答案後,這num個數可以互相搭配,在這個題目做出的貢獻就是num^n了

一開始看到m是1e8,三次方就爆掉longlong了,但好像是由於資料比較水,用longlong就能水過,所以也不用大費周折的去開高精度來做啦

**:

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const int n=210;

ll q_pow(ll a,ll b)

return ans;

}vecto***ct;

ll solve(ll n,ll m)

} if(temp>1)

fact.push_back(temp);

ll ans=0;

for(int i=1;i<(1<}

if(cnt&1)//奇加偶減

ans+=q_pow(m/mul,n);

else

ans-=q_pow(m/mul,n);

} return q_pow(m,n)-ans;}

int main()

跳蚤 POJ 1091 容斥原理

跳蚤time limit 1000ms memory limit 10000k total submissions 8723 accepted 2601 description z城市居住著很多只跳蚤。在z城市週六生活頻道有乙個娛樂節目。乙隻跳蚤將被請上乙個高空鋼絲的正 鋼絲很長,可以看作是無限長。...

poj1091 跳蚤 容斥原理

思路 假設跳蚤選擇x1個第一張卡片,x2個第二張卡片。xn個第n張卡片,xn 1張寫著m的卡片,那麼就可以列出方程 a1 x1 a2 x2 an xn m x n 1 1 由於可以向左跳和向右跳,因此題目即問上述不定方程是否有解?答案以及它的證明可以在任何一本數論書中找到,它的充要條件是 a1,a2...

POJ1091 跳蚤 容斥

解題報告 設數字分別為a1 a2,a3 m 那麼若方程x1 a1 x 2a2 xn 1m 1有解 則這張卡片可行。而此方程有解的充要條件為gc d a1 a2,a3 m 1 所以本題即為求gc d a1 a2,a3 m 1 1 a 1,a2 a3 an m 的方案數。那麼可以反著求gc d a1 a...