codeforces Round680 C. Division 题解

2023-05-16

codeforces Round680 C. Division 题解

题目

Oleg’s favorite subjects are History and Math, and his favorite branch of mathematics is division.

To improve his division skills, Oleg came up with t t t pairs of integers p i p_i pi and q i q_i qi and for each pair decided to find the greatest integer x i x_i xi, such that:

  • p i p_i pi is divisible by x i x_i xi;
  • x i x_i xi is not divisible by q i q_i qi.

Oleg is really good at division and managed to find all the answers quickly, how about you?

Input

The first line contains an integer t t t ( 1 ≤ t ≤ 50 ) (1≤t≤50) (1t50) — the number of pairs.

Each of the following t t t lines contains two integers p i p_i pi and q i q_i qi ( 1 ≤ p i ≤ 1 0 18 ; 2 ≤ q i ≤ 1 0 9 ) (1≤ p_i≤10^{18}; 2≤q_i≤10^9) (1pi1018;2qi109)— the i − t h i-th ith pair of integers.

Output

Print t t t integers: the i − t h i-th ith integer is the largest x i x_i xi such that p i p_i pi is divisible by x i x_i xi, but x i x_i xi is not divisible by q i q_i qi.

One can show that there is always at least one value of x i x_i xii satisfying the divisibility conditions for the given constraints.

Example

input

3
10 4
12 6
179 822

output

10
4
179

Note

For the first pair, where p 1 = 10 p_1=10 p1=10 and q 1 = 4 q_1=4 q1=4, the answer is x 1 = 10 x_1=10 x1=10, since it is the greatest divisor of 10 10 10 and 10 10 10 is not divisible by 4 4 4.

For the second pair, where p 2 = 12 p_2=12 p2=12 and q 2 = 6 q_2=6 q2=6, note that

  • 12 12 12 is not a valid x 2 x_2 x2, since 12 12 12 is divisible by q 2 = 6 q_2=6 q2=6;
  • 6 6 6 is not valid x 2 x_2 x2 as well: 6 6 6 is also divisible by q 2 = 6 q_2=6 q2=6.

The next available divisor of p 2 = 12 p_2=12 p2=12 is 4 4 4, which is the answer, since 4 4 4 is not divisible by 6 6 6.

题意

找一个最大的 x x x,满足 p   %   x = = 0   a n d   x   %   q ! = 0 p\ \%\ x == 0 \ and\ x\ \%\ q != 0 p % x==0 and x % q!=0

思路

质因数分解

  • p   %   q   ! =   0 p\ \%\ q\ !=\ 0 p % q != 0 x = p x = p x=p
  • p   %   q   =   0 p\ \%\ q\ =\ 0 p % q = 0 , 那么 p p p一定包含 q q q的所有质因数分解的结果。

举例:

p = 12    q = 6 p = 12\ \ q = 6 p=12  q=6
p = 2 2 ∗ 3 1 p = 2^2 * 3^1 p=2231 q = 2 1 + 3 1 q = 2^1 +3^1 q=21+31

要使 p   %   q   ! =   0 p\ \%\ q\ !=\ 0 p % q != 0, 只要使 p p p 将质因数 2 2 2降幂到 0 0 0(也就是q的质因数 2 2 2的次幂之下),或者将 3 3 3 的幂降到 0 0 0

所以,我们只需要枚举 q q q的质因子, 找权值最小的,即为答案。

代码

#include <bits/stdc++.h>
using namespace std;
#define ll unsigned long long
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const int maxn = 2e5 + 10;
int ans[maxn];

void solve(){
    ll p, q;
    cin >> p >> q;
    if(p % q) { //p不能被q整除,答案就是p
        cout << p << endl;
        return;
    }
    ll ans = 0;
    for (ll i = 1; i * i <= q; i++){
        if(q % i) continue; // 不是q的因子
        //i 和 q/i 都是因子
        ll t = p;
        if(i != 1){
            while(t % q == 0) t /= i; 
            ans = max(ans, t);
        }
        t = p;
        while(t % q == 0) t /= (q / i);
        ans = max(ans, t);
    }
    cout << ans << endl;
}
int main(){
    IOS; int t; cin >> t;
    while(t--){
        solve();
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

codeforces Round680 C. Division 题解 的相关文章

  • Educational Codeforces Round 149 (Rated for Div. 2)A~D

    Grasshopper on a Line 题意 给出n和k 求从0到n最少走几步 以及步长 要求步长不能整除k 思路 从n往下找到 k不等于0的数 输出该数和n 该数即可 如果n k 0 那就只需要一步 代码 gt File Name a
  • gym 101512 BAPC 2014 I Interesting Integers

    Problem codeforces com gym 101512 attachments vjudge net contest 186506 problem I Meaning 给出一个 正整数 n 要找尽量小的 a 和 b a lt b
  • Codeforces 1475C. Ball in Berland(二元容斥)

    题目传送门 题意 一个班级有a个男生和b个女生 现在这个班级有k对男女愿意一起出席毕业典礼 这里注意k对男女中可能会有某个男生或女生出现在多个pair中 你从这k对中找出两对 使得这两对中的男生不相同 女生不相同 即一个男生或女生不可能在一
  • 1300*C. Page Numbers

    解析 注意单个数的情况 include
  • C++ 中使用向下取整、向上取整和向外舍入模式进行整数除法

    最近 我看到这个问题它询问如何将整数除以ceil舍入 朝正无穷大 不幸的是 答案要么不适用于有符号整数 要么存在下溢和溢出问题 例如 接受的答案有这个解决方案 q 1 x 1 y When x为零 则存在下溢 0结果是不正确的 你如何实施c
  • 整数除法返回 0

    我觉得我错过了一些明显的东西 我正在尝试测试的分布random 这是表格 create table test id int random float float random int int 这是我想做的 truncate table te
  • 整数除法大量用于什么?

    分析https ridiculousfish com blog posts benchmarking libdivide m1 avx512 html发现新的 Apple CPU 花费了大量资源来使整数除法速度大大加快 这是一件令人惊讶的事
  • ARM中如何做除法?

    我正在尝试找到如何在 ARM 中进行除法 因为没有DIV命令 如果可以通过浮点数相乘来完成 9 0 09 通过减法或通过使用库 任何方式都可以 目前我正在使用像这样的循环使用减法进行除法 但我丢失了小数 MOV R0 70 Fahrenhe
  • 为什么 Python 3.4 对于大数除法给出错误的答案,如何测试整除性? [复制]

    这个问题在这里已经有答案了 在我的程序中 我使用除法来测试结果是否是整数 我正在测试整除性 但是 我得到了错误的答案 这是一个例子 print int 724815896270884803 61 给出 11882227807719424 p
  • 在 Python 中类型转换为“int”会生成错误的结果

    我尝试在 Python 3 3 中执行以下类型转换操作 整数 10 23 10 输出 10000000000000000000000 并且在将功率增加一个或更多之后 整数 10 24 10 输出 9999999999999999161139
  • 两个带有 count 的语句相除返回零

    我是 SQL 新手 使用 SQLiteStudio 并且正在尝试使用一些聚合函数 我想找到数据子集中个体数量小于 575 的比例 但查询始终返回零 SELECT A B 100 FROM SELECT COUNT AS A FROM Mal
  • 分裂双机器人

    我在 Android 上的划分有一个问题 double test 100 1280 double test2 0 2354 System out println test System out println test2 I have 0
  • 两个数相除总是等于零?

    在我的 Xna 游戏中 我试图将我的游戏场缩放到它运行的屏幕上 为此 我使用比例来查找实际窗口相对于我的游戏区域缩放的百分比 为此 我将实际宽度除以虚拟宽度 float percent realViewport Width this vie
  • 更改 JSlider 的可显示标签?

    我有一个 JSlider 最小值为 0 最大值为 10 000 我将主要刻度线设置为 1 000 如果我现在绘制标签 它们将显示为 0 1000 2000 3000 4000 等 我希望显示的是 0 1 2 3 4 5 等 是完成这项任务的
  • 如何仅使用位移位和加法进行乘法和除法?

    如何仅使用位移位和加法进行乘法和除法 要以加法和移位的方式进行乘法 您需要将其中一个数字分解为 2 的幂 如下所示 21 5 10101 2 101 2 Initial step 10101 2 1 2 2 0 2 1 1 2 0 1010
  • 汇编器 64b 除法

    我需要一些简单的方法来在 x86 的汇编器中除以 64b 无符号整数 我的号码保存在两个 32b 寄存器 EDX EAX 中 我需要将结果放回 EDX EAX 因数为 32b 整数 请给一些代码 如果我正确解释你的问题 特别是这部分Fact
  • JavaScript 中浮点数的除法

    我试图将屏幕宽度除以一个变量 以便在 web 视图中绘制等距的 UI 部分 然而 当变量为 3 时 100 3 在 JavaScript 中结果为 33 3333333333333336 并且第三部分无法按预期绘制 因为商的总和大于 100
  • bcdiv 使用带有科学记数法的非常小的浮点导致“除以零”错误

    使用 bcdiv 我无法使用科学记数法除以小浮点数 工作代码 bcscale 30 a 1 b 0 00000001 result bcdiv a b var dump result 结果是 字符串 20 100000000 0000000
  • 除法和乘法 2 的幂

    我在一篇论文中读到 数字除以 2 的幂并乘以 2 的幂是一个微不足道的过程 我在互联网上搜索了很多解释 但没有得到它 任何人都可以用简单的语言解释一下这实际上意味着什么 从位操作的角度来看 这是微不足道的 乘以2相当于左移1位 除法相当于右
  • 如何在 JavaScript 中使用除法 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想在 JavaScript 中除以一个数字 它会返回一个十进制值 例如 737 1070 我想要 JavaScript 返回0

随机推荐

  • 嵌入式第0部分:嵌入式工程师完全学习指南

    一 什么是嵌入式 xff08 一 xff09 定义 xff1a 传统定义 xff08 狭义嵌入式 xff09 xff1a 嵌入式系统是以应用为中心 xff0c 以计算机技术为基础 xff0c 并且软硬件课裁剪 xff0c 适用于应用系统对功
  • 【SLAM 十四讲】---第七讲、视觉里程计

    第七讲 视觉里程计
  • Vscode配置git

    1 Git介绍和安装 Git是什么 Git是目前世界上最先进的分布式版本控制系统 xff08 没有之一 xff09 简单来说 它是控制项目版本的一个工具 我们可以利用Git进行多人协作和代码备份等工作 下载git xff08 64bit w
  • Xshell连接虚拟机Ubantu失败解决办法(主机和虚拟机能够互ping的前提)

    主机和虚拟机互ping 在主机命令行里输入ipconfig指令 xff0c 查询主机ip地址 xff0c 在虚拟机Ubantu终端里输入ping 主机ip地址 xff0c ping通后 xff0c 按ctrl 43 c停止 在虚拟机Uban
  • windows 11系统安装

    安装前注意事项 1 准备8G或8G以上U盘 xff08 32G以内 xff09 2 安装系统前备份好个人需要数据 xff08 制作U盘会格式化U盘 xff0c U盘内的重要文件也要事先备份好 xff09 3 预装office的务必记住自己激
  • docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at

    一 前言 docker安装完成 xff0c 一般用户没有权限启动docker服务 xff0c 只能通过sudo来通过root用户权限来启动docker xff0c 此时对于一般用户而言 xff0c 需要执行docker ps或者docker
  • Neo4j(七)——创建新数据库(如何在Neo4j中创建新数据库)

    方法一 xff1a 找到neo4j安装目录 xff0c 编辑conf文件夹中的neo4j conf 找到dbms active database 61 xff0c 将下图中的graph db用其他名称替换 xff0c 并解除注释 xff08
  • python VScode使用gitlab简单使用流程

    一 下载安装软件 1 安装好vscode xff0c 如未安装 xff0c 下载并且安装 https code visualstudio com Download 2 安装git windows客户端 https git scm com d
  • keil5工程函数无法跳转到函数定义解决方法

    问题描述 在使用keil查看工程代码时 xff0c 进行函数的跳转 xff0c 跳转不成功并提示以下错误 这是因为在编译工程的时候少勾选了一个选项 xff0c 按下以下方式勾选上然后重新Rebuild一下工程就好了
  • Codeforces D. Prefix-Suffix Palindrome

    Codeforces D Prefix Suffix Palindrome 题解 xff1a 和D1相同 xff0c 区别是找中间的回文串要压缩时间 xff0c 用到了马拉车算法 xff08 算法介绍在下面 xff1a span class
  • codeforces 1326 E.Bombs

    codeforces 1326 E Bombs 题意 xff1a 给定 1 n 1 n 1 n 的排列p q xff0c 将
  • Educational Codeforces Round 84 题解

    Educational Codeforces Round 84 题解 A Sum of Odd Integers 题意 xff1a n n n 是否能表示为 k k k 个不同的正奇
  • codeforces 1332 E - Height All the Same(组合数学、奇偶性)

    codeforces 1332 E Height All the Same 组合数学 奇偶性 题意 xff1a 现在有一个 n m n m n m 的方格 xff0c 第 i
  • codeforces 1330 C.D.题解

    codeforces 1330 C D 题解 Dreamoon Likes Coloring 题意 xff1a 给 n lt 61 100000 n lt 61 100000 n lt 61
  • LeetCode数独问题中Bitset的巧妙用处

    LeetCode数独问题中Bitset的巧妙用处 36 有效的数独 判断一个 9x9 的数独是否有效 只需要根据以下规则 xff0c 验证已经填入的数字是否有效即可 数字 1 9 在每一行只能出现一次 数字 1 9 在每一列只能出现一次 数
  • Morris 遍历

    Morris 遍历 中序遍历 前言 我们在中序遍历的时候 一定先遍历左子树 然后遍历当前节点 最后遍历右子树 在常规方法中 我们用递归回溯或者是栈来保证遍历完左子树可以再回到当前节点 但这需要我们付出额外的空间代价 我们需要用一种巧妙地方法
  • 第九届蓝桥杯c/c++A组省赛题解

    分数 题目 1 1 43 1 2 43 1 4 43 1 8 43 1 16 43 每项是前一项的一半 xff0c 如果一共有20项 求这个和是多少 xff0c 结果用分数表示出来 类似 xff1a 3 2 当然 xff0c 这只是加了前2
  • Ltp介绍及实践(20200925)

    Ltp中源代码和模型包括 xff1a 中文分词 词性标注 未登录词识别 依存句法 语义角色标注几个模块 目录 1 标注集合 分词标注集 词性标注集 命名实体识别标注集 依存句法关系 语义角色类型 2 快速使用 载入模型 分句 用户自定义词典
  • 第十一届蓝桥杯省赛C/C++B组题解

    试题 A 跑步训练 本题总分 xff1a 5 分 题目 问题描述 小明要做一个跑步训练 初始时 xff0c 小明充满体力 xff0c 体力值计为 10000 如果小明跑步 xff0c 每分钟损耗 600 的体力 如果小明休息 xff0c 每
  • codeforces Round680 C. Division 题解

    codeforces Round680 C Division 题解 题目 Oleg s favorite subjects are History and Math and his favorite branch of mathematic