题意:贼长,初始2,第i次操作时,可以连续加好多次i,当到达某一个完全平方数时,开更,开更后必须满足膜(i+1)==0,求每次操作需要加多少次i
题解:根据题意 a[i] + ans[i] * i = a[i+1] * a[i+1]
ans[i] = (a[i+1] * a[i+1] - a[i]) / i
a[i] % i == 0
所以a[i+1] % i == 0
可以构造a[i] = i * i * (i-1) * (i-1)
ans[i] = (i+1)*(i+1)*i - (i-1)
int n;
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
if(i==1)
printf("2\n");
else
cout<<(LL)(i+1)*(i+1)*i-(i-1)<<endl;
}
}
return 0;
}
本文介绍了一种基于完全平方数的序列更新算法,通过特定公式计算每次操作所需的加法次数,确保序列值始终为完全平方数且满足模运算条件。
714

被折叠的 条评论
为什么被折叠?



