·中国剩余定理
·扩展中国剩余定理
·莫比乌斯反演
void Moblus() { memset(check,false,sizeof(check)); mu[1] = 1; int tot = 0; for(int i = 2; i <= MMX; i++) { if( !check[i] ) { prime[tot++] = i; mu[i] = -1; } for(int j = 0; j < tot; j++) { if(i * prime[j] > MMX) break; check[i * prime[j]] = true; if( i % prime[j] == 0) { mu[i * prime[j]] = 0; break; } else { mu[i * prime[j]] = -mu[i]; } } } }
·法雷级数
就是这个东东
中间每一个数的分子都是它左右两数分子之和,分母也是
扫描二维码关注公众号,回复:
2909091 查看本文章
用途:分数逼近,类似二分
HDU 6290
题意:给一个无理数,求出分母在1e5以内的最接近它的最简分数
思路:法雷级数里面能表示所有最简的真分数,用类似二分的方法不断逼近,取两个数中间的分数看要求的无理数在它的左边还是右边
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; typedef long double LD; const int SZ = 1000100; const int eps = 1e-9; int main() { int T; scanf("%d", &T); while(T--) { int k; scanf("%d", &k); LD dk = pow((LD)k, (LD)2.0/3.0); LL tmp = floor(dk); dk -= tmp; LL a1 = 0, a2 = 1, b1 = 1, b2 = 1; while(b1+b2 <= 100000LL) { LL mida = a1+a2, midb = b1+b2; LD ans = (LD)mida / midb; if(ans < dk) a1 = mida, b1 = midb; else a2 = mida, b2 = midb; } LD ans1 = (LD)a1 / b1, ans2 = (LD)a2 / b2; if(dk - ans1 < ans2 - dk) printf("%lld/%lld\n", a1 + tmp * b1, b1); else printf("%lld/%lld\n", a2 + tmp * b2, b2); } return 0; }
·指数循环节
·Lucas定理
·BM算法