题意

给定一个 \(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. 数据仓库组件:HBase集群环境搭建和应用案例

    本文源码:GitHub || GitEE 一.Hbase简介 1.基础描述 Hadoop原生的特点是解决大规模数据的离线批量处理场景,HDFS具备强大存储能力,但是并没有提供很强的数据查询机制.HBa ...

  2. ASP.NET 上传文件到共享文件夹

    创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 上传文件代码 web.config <!--上传文件配置,UploadP ...

  3. 人生苦短我用Python,本文助你快速入门

    目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...

  4. 配置Oracle数据库和监听随Linux系统自启动【转】

     配置Oracle数据库和监听随Linux系统自启动     在某些情况下需要在Linux操作系统上提供一种无人值守的随机启动Oracle的功能,目的也许仅仅是为了帮助那些对Oracle细节非常不关心 ...

  5. Go从入门到放弃(笔记存档)

    前言 考虑到印象笔记以后不续费了,这里转存到博客园一份 因内容是自己写的笔记, 未作任何润色, 所以看着很精简, 请见谅 查看官方文档 在新的go安装包中,为了减小体积默认去除了go doc 安装go ...

  6. nginx文件结构与解析,例子

    1.nginx文件结构 1 ... #全局块 2 3 events { #events块 4 ... 5 } 6 7 http #http块 8 { 9 ... #http全局块 10 server ...

  7. 串的模式匹配算法1 BF算法

    BF算法 字符串的模式匹配不一定要从主串的第一个位置开始,可以指定主串中查找的起始位置 pos. 2. 算法步骤: 1)分别利用计数器指针 i 和 j 指定主串和模式串即小字符串待比较的位置,初始化为 ...

  8. Memcached repcached 高可用

    Memcached + repcached 高可用环境 repcached 就是一个让memcached的机器能够互为主从,前端可以加一台HAProxy,后端两台memcached互为主从后,写入任何 ...

  9. MBAir下安装httprunner2.5.7 har2case 出现zsh: command not found解决方案

    MBAir下python3.8安装httprunner2.5.7 出现zsh: command not found find / -name hrun查找到路径为: /Users/w550856/Li ...

  10. 解决windows与虚拟机ubuntu互相ping不通的问题

    工作中经常用Ubuntu开发,而Ubuntu是安装在虚拟机中的,在弄网络开发的时候经常会用windows下的网络调试工具与Ubuntu中写好的网络程序进行通信,首先要保证windows与Ubuntu能 ...