题解【CF1444A Division】
题面
t 组数据。
给定参数 p,q,求一个最大的 x,满足 \((x|p)∧(q∤x)\)。
\(1\le t \le 500\),\(1\le p \le10^{18}\),\(2\le q\le10^9\),
\(1S\),\(512MB\)。
思路
当 \(p < q\) 时 或 \(q∤p\),答案显然是 \(p\),直接输出即可
当 \(q | p\),即 \(q\) 是 \(p\) 的因子时
我们可以将 \(p\) , \(q\) 质因数分解,让 \(p\) 去除以 \(q\)的质因子,直到 \(p\) 不能被 \(q\) 整除,
\(p\) 中比 \(q\) 大的质因子是对上面没有影响的,因此仅考虑\(q\) 的质因子
相比于删除多种质因子,只删一种的方案更优
穷举删除,找到最大值即可
复杂度\(O\) (\(t \sqrt{q}\))
推论
分解质因数 \(p,q,x\)
\[p=\prod a_i^{b_1}
\]\[q=\prod a_i^{b_2}
\]\[x=\prod a_i^{b_3}
\]因为条件是 \((x|p)∧(q∤x)\) 即:
\[p = k \times x =k\times \prod a_i^{b_3}(k\in N^*)
\]\[∃a_i|q,b_3<b_2
\]换句话说, \(x\) 中的包含 \(q\) 中的质因子,且质因子数量 \(<q\),可以为 \(0\)
因此要找的 \(x\) 就是 \(p\) 中删除部分质因子后的数,使得达到上述条件
相比删除多种,只需使一种质因子数量不满足上述条件即可,即只删一种
枚举 \(q\) 的所有质因子计算即可
Code
#include <iostream>//声明:luckyblock的思路
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>
#define int long long //我用 int 来代替 long long
using namespace std;
const int manx=1e6+10;
const int mamx = 1e6 + 11;
const int B = 1e6 + 11;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
inline int read() {
char c = getchar(); int x = 0, f = 1;
for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
return x * f;
}
signed main(){
int t = read();
while(t--){
int ans = 1;
int p = read(),q = read();//看清上边备注,和数据范围
int s = p;
if(p < q){cout<<p<<endl;continue;}
if(p % q != 0){cout<<p<<endl;continue;}
for(int i = 2;i*i <= q; i++){//枚举q中每一个“因子”
if(q%i == 0){
int jsq = 0,jsp = 0;
while(q % i == 0ll){ // 取模最好类型相同
q = q / i;
jsq ++;
}
while(p % i == 0ll){
p /= i;
jsp ++;
}
if(jsp < jsq) continue;//说明该 “因子 ”非 “质因子 ”
int jj = s;//因为 q p 时刻都在更新,所以预处理 用其他变量代替。
for(int k = 1; k <=jsp - jsq + 1;k++){
jj /= i;
}
ans = max(jj,ans);
}
}
if(q != 1){//比q大的质因子,注:此时的p q 以被更新,所存的数中不存在共同的质因子
int jsp = 0;
while(p % q == 0){
p /= q;
jsp++;
}
int jj = s;
for(int i = 1; i <= jsp;i ++){
jj /= q;
}
//cout<<jj<<endl;
ans = max(jj,ans);
}
cout<<ans<<endl;
}
return 0;
}
题解【CF1444A Division】的更多相关文章
- 【做题记录】CF1444A Division
CF1444A Division 题意: 给定 \(t\) 组询问,每组给两个数 \(p_i\) 和 \(q_i\) ,找出最大的整数 \(x_i\) ,要求 \(p_i\) 可被 \(x_i\) 整 ...
- 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 ...
- CF1444A (1445C)Division 题解
题意:求最大的正整数 \(x\) ,使 \(x \mid p且q \nmid x\) . 首先,当 \(q \nmid p\) ,显然取 \(x=p\) 是最优解. 现在,我们考虑 \(q \mid ...
- 【题解】HDU5845 Best Division (trie树)
[题解]HDU5845 Best Division (trie树) 题意:给定你一个序列(三个参数来根),然后请你划分子段.在每段子段长度小于等于\(L\)且子段的异或和\(\le x\)的情况下最大 ...
- Large Division(大数)题解
Given two integers, a and b, you should check whether a is divisible by b or not. We know that an in ...
- HDU3480:Division——题解
http://acm.hdu.edu.cn/showproblem.php?pid=3480 将一列数划分成几个集合,这些集合的并集为该数列,求每个数列的(最大值-最小值)^2的和的最小值. 简单的d ...
- December Challenge 2019 Division 1 题解
传送门 当我打开比赛界面的时候所有题目都已经被一血了-- BINXOR 直接把异或之后二进制最多和最少能有多少个\(1\)算出来,在这个范围内枚举,组合数算一下就行了.注意\(1\)的个数是\(2\) ...
- CodeChef November Challenge 2019 Division 1题解
传送门 AFO前的最后一场CC了--好好打吧-- \(SIMGAM\) 偶数行的必定两人平分,所以只要抢奇数行中间那个就行了 这题怎么被爆破了 //quming #include<bits/st ...
随机推荐
- 加班申请单flowable中
/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source ...
- [LeetCode]86. Partition List分离链表
/* 这个题是medium的意思应该是用双指针的方法做,如果使用下边的新建链表的方法,就是easy的题目了 双指针会用到很多链表的相连操作 */ public ListNode partition(L ...
- Liunx运维(九)-Liunx进程管理命令
文档目录: 一.ps:查看进程 二.pstree:查看进程状态树 三.pgrep:查找匹配条件的进程 四.kill:终止进程 五.killall:通过进程名终止进程 六.pkill:通过进程名种植进程 ...
- 你一定需要知道的高阶JAVA枚举特性!
JAVA枚举,比你想象中还要有用! 我经常发现自己在Java中使用枚举来表示某个对象的一组潜在值. 在编译时确定类型可以具有什么值的能力是一种强大的能力,它为代码提供了结构和意义. 当我第一次了解枚举 ...
- SqlLoad的简单使用
sqlload的简单使用: 能实现: 快速导入大量数据 1.先安装oracle 客户端机器.有点大,600M+, 2.安装时选择管理员安装(1.1g) 3.第三步的时候我的出错了.说是环境变量校验不通 ...
- 剑指Offer-连续子数组中的最大和
题目 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为 O(n). 输入 [1,-2,3,10,-4,7,2,-5] 返回值 ...
- version can neither be null, empty nor blank
在用mybatis-generator逆向生成mapper和DAO的时候,出现了这个错误. mybatis-generator:generate 原因是在pom.xml中我的mysql依赖没有写版本号 ...
- Head First 设计模式 —— 14. 复合 (Compound) 模式
复合模式 在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题. P500 思考题 public interface Quackable { public void quack(); } p ...
- K8s 平台可以如何处理 Pod 预授权问题
前言 TKEx-CSIG 是基于腾讯公有云 TKE 和 EKS 容器服务开发的内部上云容器服务平台,为解决公司内部容器上云提供云原生平台,以兼容云原生.适配自研业务.开源协同为最大特点. 业务容器上云 ...
- 【Linux】ssh远程连接到指定ip的指定用户上
通过ssh可以远程连接到其他的机器上,但是如果只想连接到指定的用户的话 需要这样做: -l 选项 (是L不是I,小写) ssh IP -l 用户名 这里的ip如果在hosts下就可以直接输入域名或者主 ...