luogu P6222
比起加强版,原题面的式子要更绕一些,毕竟这个直接给了你 。
我们一如往常的推式子。
先处理一下 。
顺便还能把 提出来。
式子太长,中间那一坨很明显可以简写一下,可以方便之后代码的处理。
我们继续推,接下来按套路来就好。
从枚举 中得到启发,枚举 (这是废话)。在枚举时,原来的 和 一样会被提出个 。
套路地设 。
后面一坨全是积性函数的狄利克雷卷积式的组合,撮合到一起也是个积性函数,那么我们设 :
就有:
接下来的难点就在于处理那两个函数了。
我们设 为一个数 在函数 中产生贡献的次数,则有:
不难发现, 的值是有规律的,你可以画个表格模拟这两个 。
发现 。
如果设 ,
那么 。
递推处理即可。
对于函数 ,已知它是积性函数,那我们先考虑 的简单情况,其中 是一个素数。
我们结合莫比乌斯函数的定义式并稍加运算,得出:
,。
, 函数出现了 ,故产生贡献时, ,此时 。
, 和 同时存在,一定有一个值为 ,所以此时 。
不用说。。。
#include <bits/stdc++.h>
#define N 20000010
#define ll unsigned int
// 内存给得太小,小心点用~ 模数自然溢出就行
using namespace std;
template <typename T>
inline void read (T &a) {
T x = 0, f = 1;
char ch = getchar ();
while (! isdigit (ch)) {
(ch == '-') and (f = 0);
ch = getchar ();
}
while (isdigit (ch)) {
x = (x << 1) + (x << 3) + (ch ^ '0');
ch = getchar ();
}
a = f ? x : -x;
}
template <typename T, typename ...A>
inline void read (T &t, A &...a) {
read (t), read (a...);
}
template <typename T>
inline void print (T x) {
if (x < 0) putchar ('-'), x = -x;
if (x > 9) print (x / 10);
putchar (x % 10 + '0');
}
inline ll qpow (ll a, ll b) {
ll ret = 1;
while (b) {
(b & 1) and (ret = ret * a);
a = a * a;
b >>= 1;
}
return ret;
}
int pri[N], cnt, k;
ll ans, f[N], g[N]; // 对应上文函数
bool is[N];
inline void phigros (int n) { //线筛
f[1] = g[1] = 1;
for (int i = 2; i <= n; i++) {
(! is[i]) and (g[i] = i - 1, f[i] = qpow (i, k), pri[++cnt] = i);
// g[i] 正常赋值,猜猜这里的 f 是啥QWQ。
for (int j = 1; j <= cnt and i * pri[j] <= n; j++) {
is[i * pri[j]] = 1;
f[i * pri[j]] = f[i] * f[pri[j]];
if (i % pri[j] == 0) { // 这里是之前 g 的部分情况
int res = i / pri[j];
if (res % pri[j]) g[i * pri[j]] = g[res] * (-pri[j]);
break;
}
g[i * pri[j]] = g[i] * g[pri[j]];
}
}
for (int i = 2; i <= n; i++) {
g[i] = g[i - 1] + g[i] * f[i];
f[i] += f[i - 1];
}
for (int i = 2; i <= n; i++) {
f[i] += f[i - 1];
} // 如前文所述
}
int t, n;
signed main () {
read (t, n, k);
phigros (n << 1);
while (t--) {
read (n);
ans = 0;
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
ans += (g[r] - g[l - 1]) * (f[(n / l) << 1] - (f[n / l] << 1));
}
print (ans);
printf ("\n");
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· Ollama系列05:Ollama API 使用指南
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率