hdu6363 bookshelf 容斥+数列+数论gcd定理(也可以Möbius)
#define _CRT_SECURE_NO_WARNINGS #include<cmath> #include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> using namespace std; #define rep(i,t,n) for(int i =(t);i<=(n);++i) #define per(i,n,t) for(int i =(n);i>=(t);--i) #define mmm(a,b) memset(a,b,sizeof(a)) typedef long long ll; const int maxn = 2e6 + 10; const ll mod = 1e9 + 7; int n, m, k; ll inv[maxn], f[maxn], fac[maxn]; ll c[maxn]; long long kpow(long long a, long long n) { long long res = 1; while (n > 0) { if (n & 1)res = res * a%mod; a = a * a%mod; n >>= 1; } return res; } void init() { f[0] = 1; f[1] = 2; fac[0] = fac[1] = 1; inv[1] = 1; rep(i, 2, maxn) { fac[i] = fac[i - 1] * (ll)i % mod; inv[i] = kpow(fac[i], mod - 2); f[i] = (f[i - 1] * f[i - 2]) % mod; //f[i]-1==F[i]==2^fi-1 } } ll C(int n, int m) { if (n < m) return 0ll; if (m == 0 || n == m) return 1ll; if (n - 1 == m || m == 1) return n; return fac[n] * inv[m] % mod * inv[n - m] % mod; } int main() { int t; cin >> t; init(); while (t--) { cin >> n >> k; mmm(c, 0);ll ans = 0; per(g, n, 1) if(n%g==0){ c[g] = C(n / g + k - 1, k - 1); for (int gg = 2 * g; gg <= n; gg += g) {c[g] -= c[gg];if (c[g] < 0)c[g] += mod;} ans += c[g] * (f[g] - 1) % mod;ans %= mod; } ans *= kpow(C(n + k - 1, k - 1), mod - 2);ans %= mod; cout << ans << endl; } } /* */
成功的路并不拥挤,因为大部分人都在颓(笑)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署