专栏文章
【LGR-208-Div.3】T3 P11310 无穷的迭代器 题解
P11310题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mir12iv9
- 此快照首次捕获于
- 2025/12/04 14:01 3 个月前
- 此快照最后确认于
- 2025/12/04 14:01 3 个月前
结论:
- 当 时,答案为 的因子 的数量 ;
- 当 时无解。
思路/证明:
根据题意,设第 次迭代后的 值为 ,则不难想到以下结论:
- 初始的 的值应为 ;
- 第一次迭代后 。
所以当初始的 就是奇数时,原式的值为整数,即只需一次迭代即可使 成为整数。
那么当 为偶数时,原式中的 一项为整数;又因为 必定为整数,所以原式的值依旧可以写成“一个整数 ”的形式。这样就可以继续使用结论二中的式子继续往后推。
于是我们设这个整数为 ,并将 次迭代后得到结果的整数部分设为 。则转移式为:
不难想到,当 为奇数,且 值依旧不是整数时, 的值即为整数, 就是答案。
观察第一个式子,因为在得到答案前, 一直是偶数,故该式子的奇偶性仅取决于 的奇偶性。若它的值为奇数,说明 的因子 的数量仅为 。
我们发现: 的因子 的数量比 少 。也就是,第次 迭代会使 的因子 的数量 。
回到初始的 ,思路就出来了。若 有 个因子 ,则 为奇数, 的值为整数,答案就是 。
无解的情况很好想到:,则 永远等于 ,不可能变成整数。
代码
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll T,k;
int main()
{
cin>>T;
while(T--)
{
cin>>k;
if(k==0){
cout<<"NO!\n";
continue;
}
ll n=0;
while(!(k&1))//k除以几次2后变成奇数,就有几个因子2
{
k/=2;
n++;
}
cout<<n+1<<endl;
}
return 0;
}
提醒:不开long long 见祖宗。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...