题意

给定一个 \(p (p\le 10^{18})\), 一个 \(q(q \le 10^9)\), 要找到一个最大的 \(x\) 满足:

  1. \(p \%x = 0\)
  2. \(q \% x \neq 0\)

分析

直接枚举 \(p\) 的因数不可取,复杂度为 \(O(\sqrt p)\)。需要另辟蹊径。

容易发现,若 \(p\%q \neq 0\) ,那么答案即为 \(p\)

接下来考虑 \(p\%q = 0\) 的情况。

考虑到唯一分解的定理对于任意一个大于 1 的数字 n 都有

\[n = q_1^{c_1}q_2^{c_2}\cdots q_n^{c_n}
\]

其中 \(q_i\) 为 \(n\) 的质因数,\(c_i\) 为其指数。

如果一个整数 \(n\) 不能被 \(m\) 整除,那么肯定有一个质数 \(e\),它在 \(n\) 中的指数小于在 \(m\) 中的指数。例如 \(12 = 2^2*3^1\) 与 \(8 = 2^3 * 3^0\)。

然后我们枚举这个 \(e\),它必定是 \(q\) 的一个质因数,所以我们枚举 \(q\) 的质因子 \(e\),然后不断的让 \(p\) 除以 \(e\),直到 \(p\%q\neq 0\),此时的 \(p\) 就是满足题目要求的 \(x\),最后在所有的情况中取一个最大的 \(x\) 即可。

单组询问复杂度 \(O(\sqrt q)\)

int T;
ll p, q; ll gcd(ll a, ll b){
return b == 0 ? a : gcd(b, a % b);
}
void solve(ll t){
ll res = 0;
// 枚举 q 的质因数
for(int i = 2; i * i <= t;i++){
if(t % i) continue;
ll now = p; // 尝试不断的用 i 去除 p, 直到 p % q != 0
while(now % q == 0) now /= i;
while(t % i == 0) t /= i;
res = max(res, now);
}
if(t > 1){ // 质因数分解的最后一步
ll now = p;
while(now % q == 0) now /= t;
res = max(res, now);
}
printf("%lld\n", res);
}
int main(){
cin >> T;
while(T--){
scanf("%lld%lld", &p, &q);
if(p % q == 0) {
solve(q);
} else {
printf("%lld\n", p);
}
}
return 0;
}

贴一下官方题解,原理与上述一致。

CF-1445 C - Division 数论,质因数,唯一分解定理的更多相关文章

  1. hdu 1215 求约数和 唯一分解定理的基本运用

    http://acm.hdu.edu.cn/showproblem.php?pid=1215 题意:求解小于n的所有因子和 利用数论的唯一分解定理. 若n = p1^e1 * p2^e2 * ……*p ...

  2. UVA10791-Minimum Sum LCM(唯一分解定理基本应用)

    原题:https://vjudge.net/problem/UVA-10791 基本思路:1.借助唯一分解定理分解数据.2.求和输出 知识点:1.筛法得素数 2.唯一分解定理模板代码 3.数论分析-唯 ...

  3. 简单数论之整除&质因数分解&唯一分解定理

    [整除] 若a被b整除,即a是b的倍数,那么记作b|a("|"是整除符号),读作"b整除a"或"a能被b整除".b叫做a的约数(或因数),a ...

  4. B - Common Divisors (codeforces)数论算法基本定理,唯一分解定理模板

    You are given an array aa consisting of nn integers. Your task is to say the number of such positive ...

  5. FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】

    [唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...

  6. HDU-1215 七夕节 数论 唯一分解定理 求约数之和

    题目链接:https://cn.vjudge.net/problem/HDU-1215 题意 中文题,自己去看吧,懒得写:) 思路 \[ Ans=\prod \sum p_i^j \] 唯一分解定理 ...

  7. AtCoder - 2286 (数论——唯一分解定理)

    题意 求n!的因子数%1e9+7. 思路 由唯一分解定理,一个数可以拆成素数幂之积,即2^a * 3^b *……,n!=2*3*……*n,所以计算每个素因子在这些数中出现的总次数(直接对2~n素因子分 ...

  8. POJ1845Sumdiv(求所有因子和 + 唯一分解定理)

    Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 17387   Accepted: 4374 Descripti ...

  9. POJ - 1845 G - Sumdiv (唯一分解定理)

    Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...

  10. hdu3826-Squarefree number-(欧拉筛+唯一分解定理)

    Squarefree number Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

随机推荐

  1. Modbus 仿真测试工具 Mod_Rssim 详细图文教程

    Mod_RSsim是一款轻量级的Modbus从机模拟器,它可以模拟ModBusTCP和ModBusRTU的从机,能够同时模拟254个被控站,软件使用简单方便,可以满足一般的主机调试. 官方网站:www ...

  2. PHP 插件资源

    PHP   jsonRPC  百度云网盘地址  https://pan.baidu.com/s/1itCIhrdd5bPGJMefNUuKvw   提取码 : ax4d PHP Excel 百度云网盘 ...

  3. 白日梦的Elasticsearch笔记(一)基础篇

    目录 一.导读 1.1.认识ES 1.2.安装.启动ES.Kibana.IK分词器 二.核心概念 2.1.Near Realtime (NRT) 2.2.Cluster 2.3.Node 2.4.In ...

  4. 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)

    关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...

  5. 系统吞吐量与QPS/TPS

    QPS/TPS QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. ...

  6. nginx日志按天切割

    要求:以天为单位进行日志文件的切割,如host.access_20150915.log, 日志保留最近10天的, 超过10天的日志文件则进行删除. nginxcutlogs.sh脚本内容: #!/bi ...

  7. 【VNC】vnc远程连接的时候无法显示图像已解决

    介绍一个 VNC连接工具:iis7服务器管理工具 IIs7服务器管理工具可以批量连接并管理VNC服务器 作为服务器集成管理器,它最优秀的功能就是批量管理windows与linux系统服务器.vps.能 ...

  8. 汇编学习笔记——DOS及DEBUG介绍

    转自:https://www.shiyanlou.com/courses/running/332 一.课程简介 声明:该课程基于<汇编语言(第2版)>郑晓薇 编著,机械工业出版社.本节实验 ...

  9. mysql查看修改参数

    1.查看参数 show variables like '%timeout%'; 2.修改参数 会话级别修改: set session innodb_lock_wait_timeout=50; 对当前会 ...

  10. 安装macosx10.13high serria

    本教程所需资源下载链接: 链接:https://pan.baidu.com/s/1wGTezXz6zGvtlwpv6mMoSg 提取码:r6n9 安装VMware workstation 16.0,安 ...