题意:求最大的正整数 \(x\) ,使 \(x \mid p且q \nmid x\) 。

首先,当 \(q \nmid p\) ,显然取 \(x=p\) 是最优解。

现在,我们考虑 \(q \mid p\) 的情况。

考虑对 \(q\) 分解质因数,设 \(q=p_1^{a_1} \times p_2^{a_2}\times \cdots \times p_n^{a_n}\) 。

那么,\(x\) 不为 \(q\) 的倍数,当且仅当 \(\exists i\),使得 \(x\) 分解质因数后 \(p_i\) 的次数 \(< a_i\) 。

我们可以枚举每个 \(p_i\) ,使 \(x\) 分解质因数后 \(p_i\) 的次数为 \(a_i-1\) ,其他全部拉满即可。

也就是说,设 \(t\) 是 \(p\) 被 \(p_i\) 除尽后剩下的数,则最优解是 \(p_i^{a_i-1} \times t\) 。

最后在这些备选最优解中取 \(\max\) 即可。

Code:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=100010;
ll T,p,q,pr[N],cnt,vis[N];
void pre(int lim){
for(int i=2;i<=lim;i++){
if(!vis[i]){
vis[i]=1;pr[++cnt]=i;
for(int j=i;j<=lim/i;j++) vis[i*j]=1;
}
}
} int main(){
scanf("%d",&T);pre(N-1);
while(T--){
scanf("%lld%lld",&p,&q);
if(p%q!=0) cout<<p<<endl;
else{
ll ans=1,tmp=q;
for(int i=1;i<=cnt;i++){
ll cs=0,res=1;
while(tmp%pr[i]==0) tmp/=pr[i],cs++,res*=pr[i];
if(!cs) continue;//cs即为上文提到的a_i
res/=pr[i];//res=pr[i]^(a_i-1)
if(p%res==0){
ll tmp1=p;while(tmp1%pr[i]==0) tmp1/=pr[i];
ans=max(ans,res*tmp1);
}
}
if(tmp>1){//如果tmp还有残余,说明tmp本身是个质数
ll res=1;
//res肯定为1,不用算了
if(p%res==0){
ll tmp1=p;while(tmp1%tmp==0) tmp1/=tmp;
ans=max(ans,res*tmp1);
}
}
cout<<ans<<endl;
}
}
return 0;
}

CF1444A (1445C)Division 题解的更多相关文章

  1. HDU3480:Division——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=3480 将一列数划分成几个集合,这些集合的并集为该数列,求每个数列的(最大值-最小值)^2的和的最小值. 简单的d ...

  2. [Leetcode Week3]Evaluate Division

    Evaluate Division题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/evaluate-division/description/ Desc ...

  3. codeforcess水题100道

    之所以在codeforces上找这100道水题的原因是为了巩固我对最近学的编程语言的掌握程度. 找的方式在codeforces上的PROBLEMSET中过的题最多的那些题里面出现的最前面的10个题型, ...

  4. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  5. 题解【CF1444A Division】

    题面 t 组数据. 给定参数 p,q,求一个最大的 x,满足 \((x|p)∧(q∤x)\). \(1\le t \le 500\),\(1\le p \le10^{18}\),\(2\le q\le ...

  6. 【做题记录】CF1444A Division

    CF1444A Division 题意: 给定 \(t\) 组询问,每组给两个数 \(p_i\) 和 \(q_i\) ,找出最大的整数 \(x_i\) ,要求 \(p_i\) 可被 \(x_i\) 整 ...

  7. 【题解】HDU5845 Best Division (trie树)

    [题解]HDU5845 Best Division (trie树) 题意:给定你一个序列(三个参数来根),然后请你划分子段.在每段子段长度小于等于\(L\)且子段的异或和\(\le x\)的情况下最大 ...

  8. CF1444A Division 求质因数的方法

    2020.12.20 求质因数的方法 CF1444A Division #include<bits/stdc++.h> #define ll long long #define fp(i, ...

  9. 水题挑战6: CF1444A DIvision

    A. Division time limit per test1 second memory limit per test512 megabytes inputstandard input outpu ...

随机推荐

  1. IDEA2020版最佳优化思路(中文界面)

    IDEA优化 基于当前最新版idea 2020.1版本进行设置 设置中文 在idea 2020.1版本后官方是支持中文啦 先上效果图 设置方法 这里需要下载官方的中文包 鼠标悬停提示 效果图 设置方法 ...

  2. Power Designer建模之餐饮在线点评系统——需求模型实例

    总览 一级需求 二级需求 管理门户  会员门户 三级需求 系统管理  企业中心  会员中心  统计分析 四级需求

  3. JAVA学习线路:day01面向对象(继承、抽象类)

    所有的文档和源代码都开源在GitHub: https://github.com/kun213/DailyCode上了.希望我们可以一起加油,一起学习,一起交流. day01面向对象[继承.抽象类] 今 ...

  4. 如何在Windows7安装U盘中加入USB3.0驱动的支持

         安装前请务必备份好您硬盘中的重要数据. 一.在Windows7安装U盘中加入USB3.0驱动的支持 故障现象: 原生Win7系统不包含USB3.0的驱动,所以无法使用USB3.0的U盘在US ...

  5. Docker 开启非认证的2375端口,提供外部访问 Docker

    1.编辑 Docker 服务的配置文件 vi /usr/lib/systemd/system/docker.service 或者 vi /lib/systemd/system/docker.servi ...

  6. Windows7 提示“无法访问您可能没有权限使用网络资源”的解决办法

    大家经常会碰到,电脑A(Windows7)访问局域网打印机的时候出现提示"无法访问你可能没有权限使用网络资源",导致无法正常使用打印机. 那么出现这种情况该如何解决呢? 解决方法: ...

  7. 用composer安装captcha_src()不成功

    1,要么就是TP的框架配置有问题建议重新下载 2,要么就是下载captcha_src的语句有问题  正确的语句  composer require topthink/think-captcha 1.* ...

  8. docker-管理容器常用命令

    1. docker-管理容器常用命令 2. docker管理容器常用命令 1)  docker ps 显示当前正在运行的容器 [root@test-1 ~]# docker ps CONTAINER ...

  9. FreeType2使用总结(转)

    一.FreeType2简介 1. 是一个免费.开源.可移植且高质量的字体引擎: 2. 支持多种字体格式文件,并提供了统一的访问接口: 3. 支持单色位图.反走样位图渲染,这使字体显示质量达到Mac的水 ...

  10. Redis GEO 功能使用场景

    本文来源:https://www.dazhuanlan.com/2020/02/05/5e3a0a3110649/ 背景 前段时间自己在做附近直播相关业务,其中有一个核心的点就是检索用户附近的主播,也 ...