一个长方形可以由多个正方形组成,然后题目要求根据输入的长方形内部的正方形的总数,来求得有多少个长方形(正方形是特殊的长方形)满足这类条件,并且输出对应的长和宽。
假设正方形单位长度为1,长为m宽为n的长方形,令n<=m,其内部有的正方形总数为: t = m*n + (m-1)*(n-1) + (m-2)*(n-2) + ......+1*(n-m+1) = m*m*n - (m+n)*m*(m-1)/2 + (m-1)*m*(2*m-1)/6;
m*m*n可以由公式化开,将m*n凑在一起,总共有m个m*n;
- (m+n)*m*(m-1)/2由-(m+n)-2(m+n)-......-(m-1)(n+m)再由等差公式得出;
(m-1)*m*(2*m-1)/6 由1 + 4 + 9 +......+(m-1)^2 带入平方和的前a项和 Sa = a*(a+1)*(2*a+1)/6得出;
最后由化简成的公式可以看出三个未知数求出两个,最后一个必然也求的出;
代码中写的时候把行当成m了,列是n,到了行大于列的时候停止;
★题目描述
YY 想找出所有的 <n,m>正整数对使得 n 行 m 列的表格中恰好包含 t 个正方形。
★输入
输入一行,包含一个正整数 t。(1≤t≤10的18次方)(1≤t≤10的18次方)
★输出
第一行输出一个整数 z,表示 <n,m> 对的个数。
接下来包含 z 行,每行两个正整数 n,m,以空格分隔,表示 n 行 m 列的表格中恰好包含 t 个正方形。
注意:输出 <n,m> 对时,以 n 递增的顺序输出,n 相同时以 m 递增的顺序输出。
<