博客
关于我
Luogu P4844 LJJ爱数数
阅读量:325 次
发布时间:2019-03-01

本文共 1883 字,大约阅读时间需要 6 分钟。

gcd(A, g - A) = 1,且满足以下不等式:

  • (g - A) * A ≤ n
  • A * g ≤ n
  • (g - A) * g ≤ n

为了求解满足条件的数对 (A, g) 的个数,可以使用包含-排除原理和 Möbius 反演函数。首先,我们需要预处理每个数的约数,并使用邻接表存储,避免使用向量以防止超时。

代码解释

#include 
#include
#include
#include
#include
#include
#include
using namespace std;template
T read() { T x = 0; int f = 1; char ch = getchar(); while ((ch < '0') || (ch > '9')) { if (ch == '-') { f = -f; } ch = getchar(); } while ((ch >= '0') && (ch <= '9')) { x = x * 10 + ch - '0'; ch = getchar(); } return x * f;}const int maxn = 1414213;const int maxm = 13288457;int p[maxn + 10], prime[maxn + 10], cnt, mu[maxn + 10], pre[maxm + 10], now[maxn + 10], son[maxm + 10], tot;int add(int a, int b) { pre[++tot] = now[a]; now[a] = tot; son[tot] = b; return 0;}int get_prime() { p[1] = mu[1] = 1; for (int i = 2; i <= maxn; ++i) { if (!p[i]) { prime[++cnt] = i; mu[i] = -1; } for (int j = 1; (j <= cnt) && (i * prime[j] <= maxn); ++j) { int x = i * prime[j]; p[x] = 1; if (i % prime[j] == 0) { mu[x] = 0; break; } mu[x] = -mu[i]; } } for (int i = 1; i <= maxn; ++i) { if (!mu[i]) { continue; } for (int j = 1; j <= maxn / i; ++j) { add(i * j, i); } } return 0;}inline long long solve(int x, int l, int r) { long long ans = 0; for (int i = now[x]; i; i = pre[i]) { int k = son[i]; ans += mu[k] * (r / k - l / k); } return ans;}long long n;int main() { get_prime(); n = read
(); long long ans = 0; int mx = sqrt(2 * n) + 1; for (int i = 2; i <= mx; ++i) { int lower = max(1, i - n / i); int upper = min(n / i, i - 1); if (lower > upper) { continue; } ans += solve(i, lower, upper); } printf("%lld\n", ans); return 0;}

代码解释

  • 读取输入:使用 read 函数读取输入数据,处理正负号。
  • 预处理质数和 Möbius 函数:使用 Sieve of Eratosthenes 预处理质数,并计算 Möbius 函数。
  • 添加约数关系:使用邻接表存储每个数的约数关系。
  • 求解函数:使用包含-排除原理通过 Möbius 反演函数计算满足条件的数对个数。
  • 输出结果:计算并打印满足条件的数对个数。
  • 该代码通过预处理和高效的数论方法,确保在合理时间内处理大数范围,避免超时。

    转载地址:http://djwo.baihongyu.com/

    你可能感兴趣的文章
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    nodejs中express的使用
    查看>>
    Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
    查看>>
    Nodejs中的fs模块的使用
    查看>>
    NodeJS使用淘宝npm镜像站的各种姿势
    查看>>
    NodeJs入门知识
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs在Liunx上的部署生产方式-PM2
    查看>>
    nodejs基于art-template模板引擎生成
    查看>>
    nodejs字符与字节之间的转换
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    NodeJs学习笔记002--npm常用命令详解
    查看>>
    nodejs学习笔记一——nodejs安装
    查看>>
    vue3+Element-plus icon图标无法显示的问题(已解决)
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>