215. 破译密码 - mobius函数 + 整数分块

news2024/9/24 9:19:48

 215. 破译密码 - AcWing题库

mobius函数:

一个数的分解质因数形式,某一个指数>1为0,质因数为奇数个为-1,偶数个为1 

mobius函数可以与容斥结合起来,比如mobius[2] = -1, mobius[3] = -1, mobius[2 * 3] = 1。对应容斥里面的加奇减偶。

如果a、b相同的话可以用欧拉函数做,不同的话就要另寻他法。

题目可以转化为1<=x<=a/d,1<=y<=b/d,满足gcd(x, y) = 1的对数

用容斥的思想:全部的组合-gcd为(2、3、5...)的+gcd为(6、10、15...)的...

设A = a / d, B = b / d

答案就为\sum_{i=1}^{min(A,B)}\frac{A}{i}*\frac{B}{i}*mobius[i],因为质因子形式某一项指数>1的mobius函数为0,所以等同于之前的容斥

然后用整数分块的思想降低时间复杂度,在一个区间内(A/i) * (B/i)的值是固定的,可以看成一个常数,此时mobius函数可以用前缀和来降低时间复杂度。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
 
using namespace std;
 
typedef pair<int, int> PII;
typedef long long ll;
typedef long double ld;

const int N = 50010;

int a, b, d;
int primes[N], cnt;
bool st[N];
int mobius[N];

void init(int n)
{
	mobius[1] = 1;
	for(int i = 2; i <= n; i ++)
	{
		if(!st[i])
		{
			primes[cnt ++] = i;
			mobius[i] = -1;
		}
		for(int j = 0; primes[j] * i <= n; j ++)
		{
			st[primes[j] * i] = true;
			if(i % primes[j] == 0)
			{
				mobius[primes[j] * i] = 0;
				break;
			}
			mobius[primes[j] * i] = mobius[i] * -1;
		}
	}
	
	for(int i = 2; i <= n; i ++)mobius[i] += mobius[i - 1];
}

void solve()
{
	cin >> a >> b >> d;
	a /= d, b /= d;
	
	ll ans = 0;
	int n = min(a, b);
	for(int l = 1, r; l <= n; l = r + 1)
	{
		r = min(n, min(a / (a / l), b / (b / l)));
		ans += (ll)(mobius[r] - mobius[l - 1]) * (a / l) * (b / l);
	}
	cout << ans << endl;
}

int main()
{
	IOS
	init(N - 1);
	
	int _;
	cin >> _;
	while(_ --)
	{
		solve();
	}
	
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1111110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件系统工程师宝典(44)-----差分信号走线“相位失配”怎么破?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到了PCB在布局时除了要满足结构需求&#xff0c;还要考虑模块划分、特殊器件的布局以及散热问题。今天来说说高速PCB布线的一些注意事项…

2023服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…

【Docker】Docker里面安装win系统

前端时间还早想着在win上面安装DokerDesktop&#xff0c;处理暂用【Docker】Docker Desktop更换非C盘符(减轻占用率)&#xff0c;这次心想可否反过来呢&#xff1f;就是想在&#xff1a;Docker里面安装win系统 docker pull microsoft/windowsservercoredocker create --name …

Apriori(关联规则挖掘算法)

关联规则分析 事务库 上表所示的购物篮数据即是一个事务库&#xff0c;该事务库记录的是用户行为的数据。 事务 上表事务库中的每一条记录被称为一笔事务。在购物篮事务中&#xff0c;每一次购物行为即为一笔事务&#xff0c;例如第一行数据“用户1购买商品A,B,C”即为一条事…

【MATLAB源码-第51期】基于matlab的粒子群算法(PSO)的栅格地图路径规划。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都会…

完美解决 在将最终稿件上传到 IEEE PDF eXpress进行格式检查是出现“font not embedded“的问题 (不会出现自动压缩图像的现象)

最近中了一篇IEEE的论文&#xff0c;在校稿阶段&#xff0c;final paper是需要通过IEEE PDF eXpress网站的格式检查&#xff0c;然后出现一下问题&#xff1a; Errors: Font TimesNewRomanPS-BoldMT, TimesNewRomanPS-ItalicMT, TimesNewRomanPSMT is not embedded 用人话说就…

贝锐花生壳+Fooocus,快速自建可远程访问的SDXL,平替Midjourney

Midjourney、stable diffusion两款AI绘图工具是最近这段时间的热点。不过&#xff0c;事无完美&#xff0c;他们各有一些优缺点。 例如&#xff1a;stable diffusion虽然开源可私有化部署&#xff0c;但操作相对复杂&#xff0c;需要设置各类参数&#xff1b;Midjourney虽然简单…

轻松实现数据操作:JVS低代码列表页与逻辑联动的解决方案

列表页是用户对数据查询、操作的基础入口&#xff0c;那么按钮对逻辑的联动操作是我们常见的业务形态&#xff0c;那么我们先看一个示例&#xff0c;如下所示&#xff1a; 通过列表页的顶部按钮和行级按钮触发不同的逻辑&#xff0c;对本列表页的数据进行修改&#xff0c;表级按…

自动化测试中如何编写配置文件 ? 该使用什么工具 ? 一文详解使用ConfigParser读写配置文件

1. 配置文件说明 只要是用编写项目&#xff0c;你就肯定离不开配置文件 。就以测试人员编写的自动化测试项目为例 &#xff0c;如果你做连接数据库 、访问一些第三方接口、或者访问登录接口的用户名和密码。这些输入的信息最大特点就是都可能是变量&#xff0c;比如访问数据库…

STM32标准外设库下载(下载地址与步骤详解)

文章目录 1. 概述2. 官方下载地址3. 步骤详解3.1 打开官网3.2 工具与软件 ➡ 嵌入式软件 ➡ MEMS软件3.3 微控制器软件 ➡ STM32微控制器软件 ➡ STM32标准外设软件库 ➡ 选择产品系列3.4 选择版本 ➡ 点击下载3.5 点击“接受” ➡ 填写邮箱信息 ➡ 点击“下载”3.6 点击接收到…

【Django 03】QuerySet 和 Instance应用

1. DRF QuerySet 和 Instance功能概述 1.1 QuerySet 从数据库中查询结果存放的集合称为 QuerySet。 Django ORM用到三个类&#xff1a;Manager、QuerySet、Model。每个Model都有一个默认的 manager实例&#xff0c;名为objects。Django的ORM通过Mode的objects属性提供各种数据…

【Typora】解决单词爆红问题

问题&#xff1a;写笔记时&#xff0c;有许多单词爆红&#xff0c;看着十分不舒服 解决方案&#xff1a; 点击文件 --> 偏好设置 编辑器 --> 检查拼写错误&#xff0c;修改为&#xff1a;不使用拼写检查 修改好后返回界面&#xff0c;效果如下&#xff1a;

基于springboot实现线上教学平台项目【项目源码+论文说明】计算机毕业设计

摘要 在社会快速发展的影响下&#xff0c;使线上教学平台的管理和运营比过去十年更加理性化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上线上教学平台系统是一项十分重要并且有价值的事情。对于传统的线上教学平台控制模型来说&#xff0c;网上线上教学平台系…

蓝桥杯(路径 动态规划 C++)

思路&#xff1a; 1、利用动态规划的思想。 2、用f[i]来记录从第一个点到第i个点的最短距离。 3、f[i]赋值分两种情况&#xff0c;第一种&#xff1a;f[i]为0的时候&#xff0c;也就是第一种刚到i点的情况&#xff0c;记录其距离为最小公倍数&#xff1b;第二种&#xff1a;…

原生Android与uniapp开发的H5混合开发

1、uniapp项目打包 vue版本选择2.0 记住一点&#xff0c;打包H5前修改配置&#xff0c;否则在Android中打开会白屏&#xff0c;修改方式如下 打包成H5&#xff0c;打包后可以在浏览器打开确保有内容 2、将打包后的uniappH5拷贝到Android项目 assets文件夹没有就自己建 3、And…

06496基于PHP的在线考试系统设计与实现-计算机毕业设计源码

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对在线考试等问题&#xff0c;对如何通过计算…

Leetcode.19 删除链表的倒数第 N 个结点

题目链接 Leetcode.19 删除链表的倒数第 N 个结点 mid 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n n n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输…

XAMPP、Apache搭建本地PHP服务器(全网最保姆级)

XAMPP搭建本地PHP服务器 用XAMPP搭建本地PHP服务器&#xff0c;运行php文件 启动服务 打开后进入如下界面&#xff1a;根据自己的需要启动服务 我这里打开的是Apache和MySQL 可以根据自己的习惯修改端口号 默认是8080 我这里修改为80端口 修改监听的端口号 Httpd.conf文件…

【小笔记】为什么文本相似度要用余弦相似度而不用欧式距离?

欧式距离 它计算的是高维空间中两个点之间的绝对距离&#xff0c;不考虑向量的方向性 余弦相似度 它计算的是两个向量夹角的cos值&#xff0c;只关注向量的方向&#xff0c;不考虑向量的绝对大小&#xff08;因为不管长短&#xff0c;都会除以模变成单位向量&#xff09;&am…

【面试经典150 | 区间】用最少数量的箭引爆气球

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;合并区间 其他语言python3 写在最后 Tag 【合并区间】【排序】【数组】 题目来源 452. 用最少数量的箭引爆气球 题目解读 每个气球都有一个占据x轴的一个范围&#xff0c;在这个范围里射出一只箭就会引爆该气球&…