這個題的意思是給你n+1個數, a1 a2 ... an an+1 其中 1<=ai<=m i!=n+1 an+1 = m, 求解存在x1..xn+1使x1*a1+x2*a2+x3*a3+..+xn+1*an+1 = 1的a序列的個數, 由數論部分知識我們可以知道上式要滿足就得使(a1, a2, a3, .. an, an+1) = 1, 我們還能知道存在一些a序列他們的最大公約數不等於1, 然而我們要統計其中最大公約數為1的個數, 就可以使用容斥原理, 稍加思考我們可以發現(a1, a2 .. an+1) = 1的反面是(a1, a2, ... an+1)= pi的倍數, pi是m = pi^ai次方中的pi, 因此我們定義ai為a序列最大公約數為pi的倍數的方案數根據容斥原理有 res = s - (a1+a2+...ak) + (ai並aj i!=j) - ...... **如下:
#include #include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int maxn = 100000 + 10
;ll n, m;
ll pi[maxn], npi;
bool
vis[maxn];
intprime[maxn], num;
void shai(int
n)ll pow(ll a, ll b)
//a^b
return
res;
}int
main()
if(flog) npi++;
if(tp == 1) break
; }
if(tp!=1) pi[npi++] = tp; //
這裡出完所有素數後有可能不為1
ll res = 0
;
for(int i=1; i<(1
<)
cout
}return0;
}
跳蚤 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...