感觉被侮辱智商了,这水题NM省选NOI-。。。。
直接枚举一维,另一维单调不增,然后直接算答案就可以了。。。。
gan
#include<bits/stdc++.h> #define ll long long using namespace std; const int ha=1e9+7; inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;} inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;} int tqz(int x){ ll a=x*(ll)(x+1)>>1; if(a%3==0) return a/3%ha*(ll)(2*x+1)%ha; else return a%ha*(ll)((2*x+1)/3)%ha; } ll R; int ans,l,r; int main(){ scanf("%lld",&R); for(l=1,r=(int)floor(sqrt(R-1+0.001));l*(ll)l<R;l++){ while(l*(ll)l+r*(ll)r>R) r--; ADD(ans,add(tqz(r),l*(ll)l%ha*(ll)r%ha)); } ans=ans*4ll%ha; r=(int)floor(sqrt(R+0.001)); ADD(ans,4*(ll)tqz(r)%ha); printf("%d ",ans); return 0; }