题解:P12254 [蓝桥杯 2024 国 Java B] 美丽区间
weifengzhaomi · · 题解
题目意思已经很详细,这里不在复述。
思路
由于
先设一个
然后,设置两个数组,
接着,按照题目来模拟
更多细节见代码。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int cnt[5000010],l[5000010],r[5000010],k,t,n,top = 1;
signed main(){
scanf("%lld",&k);
while (true){
l[top] = r[top - 1] + 1,r[top] = l[top] + k;
while (__gcd(l[top],r[top]) != 1) r[top]++;
for (int i = l[top];i <= r[top];i++) cnt[i] = top;
if (r[top] >= 1000000) break;
top++;
}
scanf("%lld",&t);
while(t--) scanf("%lld",&n),printf("%lld\n",cnt[n]);
}