列表

详情


NC54749. 数列求和

描述

Bob有一个无限数列a,其中a_i=3 * i * i +1,他会对你询问q次,每次给你一个区间[l, r ],让你求 a_i ,即求区间[l, r ] 的各项之和,这个数字可能非常大,所以你需要对1e9+7取模。

输入描述

第一行输入一个整数q,代表q 次询问。

接下来q行,每行输入两个整数l , r代表询问的区间。第一行输入一个整数q,代表q 次询问。

接下来q行,每行输入两个整数l , r代表询问的区间。

输出描述

输出q行,每行一个整数表示当前询问的答案。

示例1

输入:

1
1 99

输出:

985149

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 388K, 提交时间: 2023-05-25 17:44:42

#include<bits/stdc++.h>
using namespace std;
const int N=1e9+7;
long long ma(long long k)
{
	if(k==0)
	return 0;
	else
	return (((((k%N)*((k+1)%N)/2)%N)*((2*k+1)%N))%N+(k%N));
} 
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		long long l,r;
		cin>>r>>l;
		cout<<(ma(l)-ma(r-1)+N)%N<<endl;
	}
	return 0;
} 

Python3 解法, 执行用时: 33ms, 内存消耗: 4664K, 提交时间: 2022-01-01 22:19:21

m=int(1e9+7)
def f(x):return (x*(x+1)*(2*x+1)//2+x)%m
for _ in range(int(input())):
    l,r=map(int,input().split())
    print((f(r)-f(l-1))%m)

上一题