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 ...
随机推荐
- three.js学习5_渲染器
THREE.WebGLRenderer WebGL Render 用WebGL渲染出你精心制作的场景 介绍 在之前的介绍中, 已经介绍过场景, 相机, 光源, 有了这些后, 就可以形成一个可观的三维展 ...
- 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...
- Java知识系统回顾整理01基础04操作符07Scanner
一.Scanner 需要用到从控制台输入数据时,使用Scanner类. 二.使用Scanner读取整数 注意: 使用Scanner类,需要在最前面加上 import java.util.Scanner ...
- np.random.multivariate_normal方法浅析
从多元正态分布中抽取随机样本. 多元正态分布,多正态分布或高斯分布是一维正态分布向更高维度的推广.这种分布由其均值和协方差矩阵来确定.这些参数类似于一维正态分布的平均值(平均值或"中心&qu ...
- Geography's sum up
1.世界气候: 热带草原气候,热带雨林气候,热带沙漠气候,热带草原气候 温带季风气候,温带大陆性气候,亚热带季风和湿润性气候,温带海洋性气候 寒带气候,高原山地气候. 2.亚洲气候: 1.大陆性气候分 ...
- unity官方案例精讲(第三章)--星际航行游戏Space Shooter
案例中实现的功能包括: (1)键盘控制飞船的移动: (2)发射子弹射击目标 (3)随机生成大量障碍物 (4)计分 (5)实现游戏对象的生命周期管理 导入的工程包中,包含着一个完整的 _scene--- ...
- Ubuntu18.04下Git安装及使用
Ubuntu 18.04 git安装配置及基本使用 git Ubuntu 准备 对Ubuntu相关资源升级 1. linux资源升级 sudo apt-get update 2. linux软件升级 ...
- 2-K8S常用命令
kubectl 命令行管理工具 类型 命令 描述 基础命令 create 通过文件名或标准输入创建资源 expose 为Deployment,Pod创建service run 在集群中运行一个特定的镜 ...
- 【转载】可能是世界上最牛逼的网站统计程序——Matomo
大家做网站的时候一般都会使用网站统计程序.通常,国内网站会使用百度统计.CNZZ等,而国外网站则会使用Google Analytics等统计.国内的统计程序普遍功能不太丰富,且响应速度一般.Googl ...
- shell-变量的数值运算与特殊应用expr
1. expr(evaluate expressions)命令的用法: expr命令一般用于整数值,当也可用于字符串,用来求表达式变量的值,同时expr也是一个手工命令行计算器. 语法:expr ex ...