1. 程式人生 > >Newcoder 156 B.托米的劃分(打表)

Newcoder 156 B.托米的劃分(打表)

Description

歐洲人托米非常喜歡數字,他經常在空閒時玩下面的遊戲

對於一個數字 nn, 托米會隨性選中一個數 pp,$ (1< p \le n),, 將 n $拆分成 u=np,v=nuu=\lfloor\frac{n}{p}\rfloor,v=n-u,並對 u,vu,v 重複這個過程,直到他有了nn11

13171317為了挑戰托米,在每次托米進行劃分時,會給托米獎勵uvu \cdot v 的分數,托米希望你能幫他最大化他的得分。

Input

第一行一個正整數TT,下面$ T 行每行一個正整數

n$

(T104,n109)(T\le 10^4,n\le 10^9)

Output

對於每組資料,輸出托米的最大得分

Sample Input

1 5

Sample Output

10

Solution

求出較小nn的答案後歸納法證明ans(n)=n(n1)2ans(n)=\frac{n(n-1)}{2},假設該結論對於所有k&lt;nk&lt;n均成立,那麼有

ans(n)=u(nu)+u(u1)2+(nu)(nu1)2=n2n2ans(n)=u(n-u)+\frac{u(u-1)}{2}+\frac{(n-u)(n-u-1)}{2}=\frac{n^2-n}{2}

,故結論對任意nn成立

Code

#include<cstdio>
using namespace std;
typedef long long ll;
int main()
{
	int T,n; 
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		printf("%lld\n",(ll)n*(n-1)/2);
	}
	return 0;
}