题解:P12267 [蓝桥杯 2024 国 Python B] 儿童数
思路:
不难发现我们可以将
那么若要满足
那么问题就转化为在
我们可以知道,分解成以上形式时,可以得到公式为
那么本题也是比较轻松的做完了。
代码:
说明:该代码已经过格式化,放心观看。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2024;
int p[N], cnt = 0, dis[N]; //2024
bool check(int x) {
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) return false;
}
return true;
}
void solve(int x) {
int j = 1;
while (x > 1 && j <= cnt) {
while (x % p[j] == 0 && x > 1) {
x /= p[j];
dis[p[j]]++;
}
j++;
}
dis[x]++;
return;
}
signed main() {
for (int i = 2; i <= 2024; i++) {
if (check(i)) {
p[++cnt] = i;
dis[i]++;
} else solve(i);
}
int ans = 1;
for (int i = 1; i <= cnt; i++) {
ans *= (1 + dis[p[i]] / 61);
}
cout << ans << "\n";
return 0;
}