CF1444A (1445C)Division 题解
题意:求最大的正整数 \(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 题解的更多相关文章
- HDU3480:Division——题解
http://acm.hdu.edu.cn/showproblem.php?pid=3480 将一列数划分成几个集合,这些集合的并集为该数列,求每个数列的(最大值-最小值)^2的和的最小值. 简单的d ...
- [Leetcode Week3]Evaluate Division
Evaluate Division题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/evaluate-division/description/ Desc ...
- codeforcess水题100道
之所以在codeforces上找这100道水题的原因是为了巩固我对最近学的编程语言的掌握程度. 找的方式在codeforces上的PROBLEMSET中过的题最多的那些题里面出现的最前面的10个题型, ...
- 算法与数据结构基础 - 图(Graph)
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
- 题解【CF1444A Division】
题面 t 组数据. 给定参数 p,q,求一个最大的 x,满足 \((x|p)∧(q∤x)\). \(1\le t \le 500\),\(1\le p \le10^{18}\),\(2\le q\le ...
- 【做题记录】CF1444A Division
CF1444A Division 题意: 给定 \(t\) 组询问,每组给两个数 \(p_i\) 和 \(q_i\) ,找出最大的整数 \(x_i\) ,要求 \(p_i\) 可被 \(x_i\) 整 ...
- 【题解】HDU5845 Best Division (trie树)
[题解]HDU5845 Best Division (trie树) 题意:给定你一个序列(三个参数来根),然后请你划分子段.在每段子段长度小于等于\(L\)且子段的异或和\(\le x\)的情况下最大 ...
- CF1444A Division 求质因数的方法
2020.12.20 求质因数的方法 CF1444A Division #include<bits/stdc++.h> #define ll long long #define fp(i, ...
- 水题挑战6: CF1444A DIvision
A. Division time limit per test1 second memory limit per test512 megabytes inputstandard input outpu ...
随机推荐
- IDEA2020版最佳优化思路(中文界面)
IDEA优化 基于当前最新版idea 2020.1版本进行设置 设置中文 在idea 2020.1版本后官方是支持中文啦 先上效果图 设置方法 这里需要下载官方的中文包 鼠标悬停提示 效果图 设置方法 ...
- Power Designer建模之餐饮在线点评系统——需求模型实例
总览 一级需求 二级需求 管理门户 会员门户 三级需求 系统管理 企业中心 会员中心 统计分析 四级需求
- JAVA学习线路:day01面向对象(继承、抽象类)
所有的文档和源代码都开源在GitHub: https://github.com/kun213/DailyCode上了.希望我们可以一起加油,一起学习,一起交流. day01面向对象[继承.抽象类] 今 ...
- 如何在Windows7安装U盘中加入USB3.0驱动的支持
安装前请务必备份好您硬盘中的重要数据. 一.在Windows7安装U盘中加入USB3.0驱动的支持 故障现象: 原生Win7系统不包含USB3.0的驱动,所以无法使用USB3.0的U盘在US ...
- Docker 开启非认证的2375端口,提供外部访问 Docker
1.编辑 Docker 服务的配置文件 vi /usr/lib/systemd/system/docker.service 或者 vi /lib/systemd/system/docker.servi ...
- Windows7 提示“无法访问您可能没有权限使用网络资源”的解决办法
大家经常会碰到,电脑A(Windows7)访问局域网打印机的时候出现提示"无法访问你可能没有权限使用网络资源",导致无法正常使用打印机. 那么出现这种情况该如何解决呢? 解决方法: ...
- 用composer安装captcha_src()不成功
1,要么就是TP的框架配置有问题建议重新下载 2,要么就是下载captcha_src的语句有问题 正确的语句 composer require topthink/think-captcha 1.* ...
- docker-管理容器常用命令
1. docker-管理容器常用命令 2. docker管理容器常用命令 1) docker ps 显示当前正在运行的容器 [root@test-1 ~]# docker ps CONTAINER ...
- FreeType2使用总结(转)
一.FreeType2简介 1. 是一个免费.开源.可移植且高质量的字体引擎: 2. 支持多种字体格式文件,并提供了统一的访问接口: 3. 支持单色位图.反走样位图渲染,这使字体显示质量达到Mac的水 ...
- Redis GEO 功能使用场景
本文来源:https://www.dazhuanlan.com/2020/02/05/5e3a0a3110649/ 背景 前段时间自己在做附近直播相关业务,其中有一个核心的点就是检索用户附近的主播,也 ...