Problem Description
現在我們有n個定理,並且這n個定理是等價的,也就是說從任意一個定理出發,都可以推出其他所有的定理。
例如
定理1:有上界的實數集合必有上確界
定理2:有界實數列必有收斂子列
定理3:單調有界的實數列一定收斂
一共存在定理1→定理2、定理2→定理1、定理1→定理3、定理3→定理1、定理2→定理3、定理3→定理2這六種推導關係,但很顯然有些推導是冗餘的,例如,如果已經證明了定理1→定理2、定理2→定理3,那麼定理1→定理3是顯然成立的,證明定理1→定理3就是多餘的。
請問我們最多可以按順序寫出多少個推導關係,使得其中任意一個推導關係和前面的結合起來不是多餘的?
Input
第一行是一個整數T,表示有T組數據,接下來T組數據,每組數據包含一個整數n表示定理的個數。
1≤T≤100,1≤n≤1000
Output
對於每組數據,輸出答案除以 10^9+7 的餘數。
Sample Input
3
1
2
3
Sample Output
0
2
5
Hint
證明定理1→定理2、定理2→定理3,那麼定理1→定理3是冗餘的
證明定理1→定理2、定理1→定理3,那麼定理2→定理3不是冗餘的
**思路:**列出前幾個數據對應的值,可發現第一個數爲0,第二個數爲0 + 2 = 2, 第三個數爲2 + 3 = 5,第四個數爲5 + 4 = 9…發現每次都是上一個值加上2,3,4… 用數組存放結果,再輸出相應值即爲答案
#include <iostream>
using namespace std;
typedef long long ll;
ll mod = 1000000007;
int main() {
ll a[1005] = {0}, num = 2;
for(int i = 1; i < 1000; i++) {
a[i] = (a[i-1] + num) % mod;
num++;
}
int n, t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
printf("%lld\n", a[n-1]);
}
return 0;
}