类欧
作者:互联网
https://www.luogu.org/blog/shiqingyu/solution-p5170 公式要记
(ai+b)/c;
#include<bits/stdc++.h> #define ll long long using namespace std; const int mod=998244353; const int inv2=(mod+1)/2; ll FF(ll a,ll b,ll c,ll n){ // 0-n (ai+b)/c; if(a==0) return (n+1)%mod*(b/c)%mod; if(n==0) return (b/c)%mod; if(a>=c || b>=c) return ( 1ll*n%mod*(n+1)%mod*inv2%mod*(a/c)%mod+1ll*(n+1)%mod*(b/c)%mod+FF(a%c,b%c,c,n) )%mod; ll m=(1ll*a*n+b)/c; return ( 1ll*(n%mod)*(m%mod)%mod-FF(c,c-b-1,a,m-1))%mod; } ll GG(ll a,ll b,ll c,ll n){ // 0-n ( (ai+b)/c )*( (ai+b)/c ) } ll HH(ll a,ll b,ll c,ll n){ // 0-n ( (ai+b)/c )*i } int main(){ int T; scanf("%d",&T); while(T--){ int a,b,c,n; scanf("%d %d %d %d",&n,&a,&b,&c); printf("%lld 0 0\n",(FF(a,b,c,n)%mod+mod)%mod); } }View Code
#include<bits/stdc++.h> #define ll long long const int mod=1e9+7; const int inv2=(1+mod)/2; const int inv6=1; // 这个错得 using namespace std; struct ou{ int a,b,c,n; ll f(ll a, ll b, ll c, ll n) { // 0-n (ai+b)/c; if (a == 0) return (n + 1) * (b / c) % mod; if (n == 0) return (b / c); if (a >= c || b >= c) return (f(a % c, b % c, c, n) + (a / c) * n % mod * (n + 1) % mod * inv2 % mod + (b / c) * (n + 1) % mod) % mod; ll m = (a * n + b) / c; return (n * m % mod - f(c, c - b - 1, a, m - 1)) % mod; } ll g(ll a, ll b, ll c, ll n) { // 0-n ( (ai+b)/c )*( (ai+b)/c ) if (a == 0) return (b / c) * n % mod * (n + 1) % mod * inv2 % mod; if (n == 0) return 0; if (a >= c || b >= c) return (g(a % c, b % c, c, n) + (a / c) * n % mod * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod + (b / c) * n % mod * (n + 1) % mod * inv2 % mod) % mod; ll m = (a * n + b) / c; return (n * (n + 1) % mod * m % mod - f(c, c - b - 1, a, m - 1) - h(c, c - b - 1, a, m - 1)) % mod * inv2 % mod; } ll h(ll a, ll b, ll c, ll n) { // 0-n ( (ai+b)/c )*i if (a == 0) return (n + 1) * (b / c) % mod * (b / c) % mod; if (n == 0) return (b / c) * (b / c) % mod; if (a >= c || b >= c) return ((a / c) * (a / c) % mod * n % mod * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod + (b / c) * (b / c) % mod * (n + 1) % mod + (a / c) * (b / c) % mod * n % mod * (n + 1) % mod + h(a % c, b % c, c, n) + 2 * (a / c) % mod * g(a % c, b % c, c, n) % mod + 2 * (b / c) % mod * f(a % c, b % c, c, n) % mod) % mod; ll m = (a * n + b) / c; return (n * m % mod * (m + 1) % mod - 2 * g(c, c - b - 1, a, m - 1) - 2 * f(c, c - b - 1, a, m - 1) - f(a, b, c, n)) % mod; } }; int main(){ }View Code
标签:return,int,ll,inv2,ai,类欧,mod 来源: https://www.cnblogs.com/Andromeda-Galaxy/p/11345253.html