1466: Huybery玩转模运算
时间限制: 5 Sec 内存限制: 32 MB题目描述
模运算是一个二元运算,当m和n是正整数时,m除n的商是,对于此除法的剩余也有一个简单的表示法,且我们称它为‘n mod m'。基本公式
告诉我们,我们能把n mod m表示成
,而且可以推广到负整数甚至任意实数:
. 模运算在程序设计中通常用‘%’表示。
现在,Huybery已经学会了模运算,但是他计算时遇到了困难,请你帮帮他。
输入
第一行输入一个数字t(1<=t<=1000),表示有t组测试数据。
第二行到第t+1行,每行一个数n(1<=n<=10^6)。
输出
对于输入的每组测试数据n,输出表达式计算的结果。
样例输入
3
1
2
3
样例输出
0
0
1
提示
来源
CODE:
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
typedef long long LL;
int main()
{
int t,n;
cin>>t;
while(t--)
{
scanf("%d",&n);
LL sum=0;
LL cnt,start,end=n+1;
for(int i=1;i<=sqrt(n);i++)
{
if(n/i>sqrt(n)){
start=n/(i+1)+1;
cnt=end-start;
sum+=cnt*(n%start+n%(end-1))/2;
end=start;
}
sum+=n%i;
}
cout<<sum<<endl;
}
return 0;
}