您的位置:首页 > 其它

CF 715A Plus and a square root(数学构造)

2016-09-28 16:36 615 查看
点击打开链接

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int Mod=1e9+7;
const int M=1e5+1;
long long a[M];//a[i]第i层时要升级时的数字
long long ans[M]; // 第i层需要加的次数
int main()
{

// 要从i层升到i+1层时的a[i]要满足 (i+1)|sqrt(a[i])
//第i+1层每次加i+1 : i+1|(a[i+1]-sqrt(a[i])) 也可以写成 a[i+1],sqrt(a[i])同余i+1
//a[i]也是i的倍数,所以构造出满足条件的a[i]通项
for(int i=1;i<M;i++)
{
a[i]=i*i*(i+1)*(i+1); // a[i]会溢出 所以直接打印ans[i]
//a[i]=sqrt(a[i-1])+ans[i]*i;
//i*i*(i+1)*(i+1)=(i-1)*i+i*ans[i]
//ans[i]=i*(i+1)*(i+1)-(i-1)
}
int n;
while(cin>>n)
{
cout<<2<<endl;//2+1*2=4
for(int i=2;i<=n;i++)
{
cout<<(long long)i*(i+1)*(i+1)-(i-1)<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: