不是这个段位的,跨个区凑个热闹。。
牛客编程巅峰赛S2第1场 - 钻石&王者
AB题是 牛客编程巅峰赛S2第1场 - 青铜&白银&黄金 记录&总结 中的BC题
C 牛牛算题
对做带余除法,
为商,
为余数。
求
就是朴素的思路。。所以时间不是很快,达到10ms了,其他人的解法我没大看懂。。
第一次把p,k对称的部分加上,同时记录哪些已经算过了。
第二次把剩下的,用等差数列求和计算加上去。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回1-n的所有k*m的和 * @param num long长整型 正整数 n * @return long长整型 */ typedef long long LL; const LL Mod=1e9+7; long long cowModCount(long long num) { // write code here LL sum=0,m=floor(sqrt(num)); LL vec[2*m],tmp; for(LL i=1;i<=m;i++){ tmp=num/i; vec[i-1]=i; vec[2*m-i]=tmp; if(tmp!=i){ sum+=(i+tmp)*(num%i)%Mod; }else{ sum+=(i)*(num%i)%Mod; } sum%=Mod; } LL count=0; for(LL i=2*m-1;i>=1;i--){ if(vec[i]==vec[i-1]||vec[i]==vec[i-1]+1){ count++; continue; }else{ count++; } LL a=num%(vec[i-1]+1),b=num%(vec[i]-1); LL p=(a+b)*(vec[i]-vec[i-1]-1)/2*count%Mod; sum+=p; sum%=Mod; } return sum; } };