51nod 1352 集合計數(擴充套件歐幾里得)
題目連結:傳送門
題意:略
分析:
很簡單可以得到一個方程 A*x + B*y = N + 1
這式子可以用擴充套件GCD求出gcd,x和y,然後我們求出大於0的最小x,A*x第一個滿足條件的集合firstSet,剩下的N-firstSet個集合可以直接除LCM(A,B)(A和B的最小公倍數)統計出數量。
程式碼如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#define LL long long
using namespace std;
LL exgcd(LL a, LL b, LL &x, LL &y) {
LL r,t;
if(b==0) {
x=1;
y=0;
return a;
}
r=exgcd(b,a%b,x,y);
t=x;
x=y;
y=t-a/b*y;
return r;
}
int main() {
int t;
scanf("%d", &t);
while(t--) {
LL ans = 0;
LL N, A, B;
LL xx,yy,d,r;
scanf("%I64d%I64d%I64d",&N, &A, &B);
d=exgcd(A, B, xx, yy);
if(((N + 1) % B) % d != 0) ans = 0;
else {
LL lcm = A * B / d;
xx = xx *(((N + 1) % B) / d);
r = B / d;
xx=(xx % r + r) % r;
if(xx == 0) {
xx = lcm / A;
}
if(xx * A > N) {
ans = 0;
printf("%I64d\n", ans);
continue;
}
ans += ((N - xx * A) / lcm);
ans++;
}
printf("%I64d\n", ans);
}
return 0;
}
相關文章
- 擴充套件歐幾里得套件
- 歐幾里得演算法與擴充套件歐幾里得演算法演算法套件
- 淺談擴充套件歐幾里得演算法套件演算法
- POJ1061擴充套件歐幾里得定理套件
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- discuz擴充套件工具集合套件
- 擴充套件歐幾里得的幾個定理以及證明套件
- 擴充套件歐幾里得演算法公式快速推導套件演算法公式
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- hdu Yet another end of the world(擴充套件歐幾里得定理推論)套件
- 第六章 數學問題 -------- 6.5 歐幾里得演算法及其擴充套件演算法套件
- 第六章 數學問題 -------- 6.7【擴充套件歐幾里得】一步之遙套件
- 擴充套件叢集blk數套件
- 數論分塊擴充套件套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- es6-數值擴充套件套件
- ES6數字擴充套件套件
- 湘潭大學四月月賽C題A+B(擴充套件歐幾里得定理)套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- CONNECT BY 擴充套件用法,實現獲取bom級聯擴充套件數量套件
- Laravel集合探學系列——新增擴充套件macro策略(一)Laravel套件Mac
- BZOJ2839/LG10596 集合計數 題解(二項式反演+擴充套件尤拉定理)套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Sanic 擴充套件套件
- ORACLE 擴充套件Oracle套件
- 擴充套件工具套件
- DOM擴充套件套件
- 擴充套件ACL套件
- Lua擴充套件套件
- 照片擴充套件套件
- 擴充套件篇套件
- disable or 擴充套件套件
- 擴充套件表套件
- Mybatis擴充套件MyBatis套件
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- INFORMIX表的預設初始擴充套件、下一個擴充套件資料塊以及一個表允許的最大擴充套件數。ORM套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP