题目大意
一个环,从0开始到p-1,开始位于0的位置,第一次走1步,第二次走2步,第三次走3步…
问n步后走过了多少个不同的点?
题解
通过简单模拟发现,2p步后回到原点
如果n大于2p,那么相当于2p+1,2p+2…那么和原来的又相同了
意思就是2p范围内是有效的,超过了就一直重复之前的行为。
就算是0步,原来的点是0,也是1个不同的点。
#include <iostream>
#include <cmath>
using namespace std;
#define ll long long
const int maxn = 1e7+5;
ll arr[maxn];
int main()
{
ll p,n;
scanf("%lld %lld",&p,&n);
ll x=0, ans = 0;
for(ll i = 0; i <= min(2*p,n); i++)
{
x = (i + x) % p;
if(!arr[x]) ans++,arr[x]=1;
}
printf("%lld",ans);
return 0;
}