题目描述
输入 l,r,输出 l∼r 的每个数的算数平方根下取整之和,即:
输入格式
两个整数 l,r。
输出格式
输出一个整数,即算数平方根之和。
输入1:
4 9
输出1:
13
4∼9 的算术平方根下取整分别为 2,2,2,2,2,3和为 13。大样例就不给了。
数据规模与约定
对于 100% 的数据,0≤l≤r≤10^14。
- 子任务 1(40 分):保证 r≤10^7。
- 子任务 2(30 分):保证 l=r。
- 子任务 3(20 分):保证 r−l≤10^7。
- 子任务 4(10 分):没有特殊限制。
代码实现:
#include<bits/stdc++.h>
#define int long long
using namespace std;
void outInt128(__int128 x){
int num=x%10;
if(x/10>0) outInt128(x/10);
cout<<num;
}
signed main(){
//freopen("Square.in","r",stdin);
//freopen("Square.out","w",stdout);
int l,r;
cin>>l>>r;
__int128 sum=0;
for(int i=1;i<=10000000;i++){
__int128 L=i*i;
__int128 R=(i+1)*(i+1)-1;
if(R<l) continue;
if(L>r) break;
if(R>r) R=r;
if(L<l) L=l;
sum+=i*(R-L+1);
}
outInt128(sum);
return 0;
}