题目大意:给你你个特殊的计算器,刚开始的时候计算器屏幕上的数字是2,并且处于level1,我们可以有两种操作:
1.按下“+”,那么屏幕上的数字会加上当前的level;
2.按下“sqrt”,就是开方,但是level会加1,并且要满足开方后的数要整除(level+1);
题目解析:这类题目肯定有很多解,我们只需要找到一个通式就好了,我试了一下,对于level =k而言,首先屏幕上的数字一定是k的倍数,而且要能够开方,必定为k*k的倍数,并且开放后能够整除与k+1,所以一定也是(k+1)*(k+1)的倍数,可能还有一个系数,我们不去管它,直接设为1,于是公式就出来了:
1.当n=1的时候,我们就输出2;
2.当n>=2的时候,我们就得到公式:answer = (i+1)*(i+1)*i-i+1;
以下为AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
__int64 i;
while(scanf("%d",&n)!=EOF)
{
printf("2\n");
for(i=2;i<=n;i++)
printf("%I64d\n",(i+1)*(i+1)*i-i+1);
}
return 0;
}