时间复杂度入门——从l加到r
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Problem D. 时间复杂度入门——从l加到r
时间限制:1s
空间限制:256MB
题目背景
衡量一段代码的优劣,其中一种衡量方法可以根据执行时间和执行空间两个方面考虑,即时间复杂度和空间复杂度。本段只考虑时间维度,用简单的话来讲述时间复杂度,就是这段代码一共执行了多少条语句;计算机一秒钟一般(在不开优化的情况下)能够执行 条语句,也就是说如果代码中执行语句过多,那么就不能在较短时间内获得结果。
例如,求 的结果,如果写下面这段代码:
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
long long int ans = 0;
for(int i=1; i<=n; i++)
ans += i;
printf("%lld\n", ans);
return 0;
}
可以看出这段代码的执行语句数量与 同阶(即执行语句数量=kn + b,k和b为常数),因为主要开销是执行了 次循环;那么当 为 或者更大值时,就有很大可能无法在 1s 内获得结果。
题目描述
给定两个正整数 和 ,求 的结果。
本题包含多组输入。
输入描述
第一行输入一个正整数 ,代表数据组数。
接下来 行,每行包括两个正整数 ,用空格隔开。
输出描述
输出 行,每行一个整数,代表 的结果。
注意,本题答案可能会超出 int
能表示的最大范围,所以需要使用 long long int
存储答案。
另外需要知道 int
类型数据和 int
类型数据相加或者相乘结果的类型还是 int
。
样例1
输入
2
3 5
999999 999999999
输出
12
499999499501499999