当前位置: 首页 > news >正文

洛谷 P2568 GCD-提高+/省选−

题目描述

给定正整数 nnn,求 1≤x,y≤n1\le x,y\le n1x,yngcd⁡(x,y)\gcd(x,y)gcd(x,y) 为素数的数对 (x,y)(x,y)(x,y) 有多少对。

输入格式

只有一行一个整数,代表 nnn

输出格式

一行一个整数表示答案。

输入输出样例 #1

输入 #1

4

输出 #1

4

说明/提示

样例输入输出 1 解释

对于样例,满足条件的 (x,y)(x,y)(x,y)(2,2)(2,2)(2,2)(2,4)(2,4)(2,4)(3,3)(3,3)(3,3)(4,2)(4,2)(4,2)


数据规模与约定
  • 对于 100%100\%100% 的数据,保证 1≤n≤1071\le n\le10^71n107

来源:bzoj2818。

本题数据为洛谷自造数据,使用 CYaRon 耗时 555 分钟完成数据制作。

solution

  • 若 gcd(x,y) = p 则 x,y 均为 p 的倍数,且其余部分互质。
    • 1 若 x=p∗px,[1,px]x = p * p_x, [1, p_x]x=ppx,[1,px] 中和 pxp_xpx 互质的有 ϕ(x)\phi(x)ϕ(x) 个(欧拉函数),即
      ∑p<=n∑i=1n/p(ϕ(i)∗2−1)\sum_{p<=n}\sum_{i = 1}^{n / p}(\phi(i)*2-1)p<=ni=1n/p(ϕ(i)21)
    • 2 例如 n=4时,p=2,[ϕ(1)+ϕ(2)]∗2−1=3。p=3,ϕ(1)∗2−1=1n = 4时,p = 2 , [\phi(1) + \phi(2)] * 2-1 = 3。p = 3, \phi(1)*2 - 1 = 1n=4时,p=2,[ϕ(1)+ϕ(2)]21=3p=3,ϕ(1)21=1
  • 具体:
    • 1 筛选出质数 p, 并算出 ϕ(i),i∈[1,n]\phi(i),\,\, i\in[1,n]ϕ(i),i[1,n]
    • 2 遍历质数,统计个数

代码

#include "cstring"
#include "string"
#include "algorithm"
#include "iostream"
#include "vector"
#include "unordered_set"
#include "unordered_map"
#include "bitset"
#include "queue"
#include "set"using namespace std;/**  P2568 GCD*  题目大意:给定正整数 n,求 1≤x,y≤n 且 gcd(x,y) 为素数的数对 (x,y) 有多少对。*  思路: 若 gcd(x,y) = p 则 x,y 均为 p 的倍数,且其余部分互质。*  1 若 x = p * px, [1, px] 中和 px 互质的有 phi(x) 个,即 sum(p, sum(phi(px))*2-1) i=[1,n/p]*  2 例如 n = 4,  p = 2  [phi(1) + phi(2)] * 2-1 = 3   p = 3 phi(1)*2 - 1 = 1*  具体:*  1 筛选出质数p, 并算出 phi(i) i=1,n*  2 遍历质数,统计个数**/const int N = 1e7 + 5, M = 2e6, INF = 1e9, MOD = 0;
typedef long long ll;int prime[N], n, k, f[N], np[N];int main() {cin >> n;// 1 筛选出 n 以内所有质数, 和欧拉函数 f[x]f[1] = 1;for (int i = 2; i <= n; i++) {if (!np[i]) prime[++k] = i, f[i] = i - 1;else f[i] = (i / np[i] % np[i] == 0) ? f[i / np[i]] * np[i] : f[i / np[i]] * (np[i] - 1);for (int j = 1; j <= k && prime[j] * i <= n; j++) {np[i * prime[j]] = prime[j];if (i % prime[j] == 0) break;}}ll ans = 0;for (int i = 1; i <= k; i++) {for (int j = 1; j * prime[i] <= n; j++)ans += f[j] * 2;ans--;}cout << ans;return 0;
}

结果

在这里插入图片描述

http://www.dtcms.com/a/355954.html

相关文章:

  • 「Java EE开发指南」如何使用MyEclipse启用自动JSP验证?
  • C语言————函数递归(通俗易懂)
  • logcat 网络日志解析
  • 二、开关电源的EMC改善措施
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-图像处理与数据预处理
  • Maven 编译打包一个比较有趣的问题
  • yolo学习笔记01——前置基础
  • 【力扣】2715. 执行可取消的延迟函数
  • 生产环境Vue组件报错:Cannot access before initialization
  • 将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker
  • 前后端分离情况下,将本地vue项目和Laravel项目以及mysql放到自己的云服务器
  • 工业 5G + AI:智能制造的未来引擎
  • Mybatis-增删改查
  • 逻辑回归以及损失函数
  • 数字孪生(Digital Twin):未来产业与城市的智慧引擎
  • AI Agent从0到1:剖析Block与GSK的两种产品化落地路径
  • 容器学习04-kubernetes(k8s)
  • 海康相机开发---设备登录
  • (二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵
  • 【LInux】常用命令笔记
  • Linux之Shell编程(一)
  • 异步方法和多线程有什么区别,他们的实现逻辑是什么以及为什么异步方法: 不能和调用者在同一个类中
  • VisionPro联合编程控件导入WinFrom以及VS卡死问题
  • GCC版本和C语言标准版本的对应关系
  • 一个Demo射击小计(纯蓝图)
  • 前端学习 10-1 :验证中的UVM
  • .Net Core Web 架构(管道机制)的底层实现
  • jadx反向编译JAR包
  • 基于SQL数据库的智能问答系统设计与实现
  • Codeforces Round 1043 (Div. 3) D. From 1 to Infinity