1. 已知正整数n的立方可以表示为n个连续奇数的和,例如:
3的3次方 = 7 + 9 + 11 (不会打那个次方数)
6的3次方 = 31 + 33 + 35 + 37 + 39 + 41
对于任意给定的正整数m,如何得到这连续m个奇数呢?
3的3次方 = 7 + 9 + 11 (不会打那个次方数)
6的3次方 = 31 + 33 + 35 + 37 + 39 + 41
对于任意给定的正整数m,如何得到这连续m个奇数呢?
假设从奇数x开始的m个奇数之和为m*m*m
则由等差数列求和:(x+x+(m-1)*2)=m*m*m
所以,x=m*m-m+1不用编程.
则由等差数列求和:m*(x+x+(m-1)*2)/2=m*m*m
n个连续奇数的和就等于x+(x+2)+...+(x+(2n-2)) = (x+n-1)*n(应该学过这种计算方法吧——(首项+末项)*项数/2)正整数n的立方可以表示为n个连续奇数的和就可以变成 n*n*n = (x+n-1)*n -> n*n = x+n-1 -> x=n*n-n+1 这一步就解决了import java.util.ArrayList;
import java.util.List;public class SumTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> ret = retrieveNums(3);
System.out.println("正整数3的立方可以表示以下为3个连续奇数的和:");
System.out.println(ret);
ret = retrieveNums(6);
System.out.println("正整数6的立方可以表示以下为3个连续奇数的和:");
System.out.println(ret);
}
public static List<Integer> retrieveNums(int n)
{
List<Integer> ret = new ArrayList<Integer>();
int firstNum = n*n - n + 1;
for(int i=0;i<n;i++)
{
ret.add(firstNum + 2*i);
}
return ret;
}
}
但是我现在如何验证这个算法是正确的呢?
ret = retrieveNums(6);
这个参数6是错误的,这样的话就返回六个连续的奇数了,和这个意图想违背“正整数6的立方可以表示以下为3个连续奇数的和”。。