等差数列整除整数向下取整求和
找的一个巨巨的板子,,,但是不知道怎么证的。。。。。
还是存一下板子吧。。。。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
//a 公差 b 首项 c 除数 n 项数
ll get(ll a,ll b,ll c,ll n){
if (n<=0) return 0;
if (n==1) return b/c ;
ll tmp = 0;
tmp += a/c*(n-1)*n/2+ b/c*n;
a = a%c;
b = b%c;
if (a==0) return tmp;
return tmp+get(c,(a*n+b)%c,a,(a*n+b)/c);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int T;ll p,q,n;
cin>>T;
while(T--){
cin>>p>>q>>n;
cout<<(p*n*(n+1)/2-q*get(p,p,q,n))<<endl;
}
}
本文介绍了一个用于解决等差数列整除问题的递归算法,并提供了完整的C++实现代码。该算法可以高效地计算出等差数列中各元素被指定数整除向下取整后的总和。
2747

被折叠的 条评论
为什么被折叠?



