longlongf(longlong a,longlong b,longlong c,longlong n){if(!a)return b / c *(n +1);elseif(a >= c || b >= c)returnf(a % c, b % c, c, n)+ n *(n +1)/2*(a / c)+(n +1)*(b / c);else{longlong m =(a * n + b)/ c;return n * m -f(c, c - b -1, a, m -1);}}
此时这条直线变为\(y=\frac ab x+\frac {c-an}{b}=\frac {ax+(c\;\bmod\;a)}b\),然后套到类欧的模板里再加上坐标轴上的贡献即可。
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>usingnamespace std;longlong a, b, c;longlongf(longlong a,longlong b,longlong c,longlong n){if(!a)return b / c *(n +1);elseif(a >= c || b >= c)returnf(a % c, b % c, c, n)+ n *(n +1)/2*(a / c)+(n +1)*(b / c);else{longlong m =(a * n + b)/ c;return n * m -f(c, c - b -1, a, m -1);}}intmain(){#ifndef ONLINE_JUDGE freopen("cpp.in","r",stdin);#endif
cin >> a >> b >> c;printf("%lld\n",f(a, c % a, b, c / a)+ c / a +1);return0;}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步