//此方法循环次数会比遍历到n的循环次数少2倍;提高效率。
//当然,此方法并不是最优解,还有更高效的算法。
//n值比较小的话,看不出太大差别。这里就不列举了。
int sum(int n)
{
// 1. 最好限定用户输入n的最大值,防止result可能溢出。
// 2. 还要进行n < 1的异常情况判断,这里就不加了。
// 3. result必定是正整数,建议变量定义和函数返回值使用unsigned int类型
int i, remain, num;
int result = 3; //排除1和2,从3开始循环。1+2=3
remain = n%3; //输入数据是否有余数。0、1、2
num = n - remain; //最大可整除的数
if(remain == 1) //如果余数为1,则n本身不能被整除
result += n;
else if(remain == 2) //余数为2,n本身与n-1 皆不能被整除
result += n*2 - 1;
for(i = 3; i != num; i+=3)
result += i * 2 + 3; // result = result + (i + 1) + (i + 2);
return result;
}