不是这个段位的,跨个区凑个热闹。。
牛客编程巅峰赛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;
}
};
京公网安备 11010502036488号