题面

  • 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】的更多相关文章

  1. 【做题记录】CF1444A Division

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

  2. CF1444A Division 求质因数的方法

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

  3. 水题挑战6: CF1444A DIvision

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

  4. CF1444A (1445C)Division 题解

    题意:求最大的正整数 \(x\) ,使 \(x \mid p且q \nmid x\) . 首先,当 \(q \nmid p\) ,显然取 \(x=p\) 是最优解. 现在,我们考虑 \(q \mid ...

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

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

  6. Large Division(大数)题解

    Given two integers, a and b, you should check whether a is divisible by b or not. We know that an in ...

  7. HDU3480:Division——题解

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

  8. December Challenge 2019 Division 1 题解

    传送门 当我打开比赛界面的时候所有题目都已经被一血了-- BINXOR 直接把异或之后二进制最多和最少能有多少个\(1\)算出来,在这个范围内枚举,组合数算一下就行了.注意\(1\)的个数是\(2\) ...

  9. CodeChef November Challenge 2019 Division 1题解

    传送门 AFO前的最后一场CC了--好好打吧-- \(SIMGAM\) 偶数行的必定两人平分,所以只要抢奇数行中间那个就行了 这题怎么被爆破了 //quming #include<bits/st ...

随机推荐

  1. 将从数据库查询出来的带有父子结构的list转换成treeList结构

    package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta ...

  2. CentOS 搭建 SVN 服务器 及使用教程

    服务器与客户端 1.搭建SVN服务器 ① CentOS安装SVN 命令: yum -y install subversion 检查是否安装成功 命令: svn --version 如果显示如下内容说明 ...

  3. 有关CSS 定位中的盒装模型、position、z-index的学习心得

    开始整体之前我需要说明两个概念: 第一个就是   一切皆为框  也就是说在HTML中的不管是是块级的还是内联的,都可以认为成块的,唯一的区别就是块的会独自占据一行 第二个文档流:  一个网页可以看作是 ...

  4. Kubernetes官方java客户端之二:序列化和反序列化问题

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. 改进你的c#代码的5个技巧(二)

    在本文中,我将向你展示c#编程的5个最佳实践.我从日常编程经验中学到了这些实践.我在release模式下测试了所有的代码,并在开发环境稳定后进行了截屏.我想你会喜欢这些建议的. 在使用数据类型之前选择 ...

  6. linux security module机制

    linux security module机制 概要 Hook机制,linux MAC的通用框架,可以使用SElinux, AppArmor,等作为不同安全框架的实现

  7. 如何在Linux(CentOS7)环境搭建 Jenkins 服务器环境

    最近,我自己要亲手搭建一套完整的企业级 CI/CD 环境,这个环节里面涉及了很多内容,没有办法把这么多的内容都放在一篇文章里,所以 Jenkins 的安装和Java 的 JDK 安装我就是分了两篇文章 ...

  8. vue的路由以后的页面整合

    前面呢也提到一点点,今天就吧这个页面整合给分享一下.有不对的地方还望包容. 在vue中,一般在主显示的界面的路径呢一般是'/'也就是单括号中有一斜杠的这个呢是默认的显示路径.只要路由配置了这个路径用& ...

  9. self-taught CS resouce recommendation

    https://github.com/keithnull/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md#%E8%AE%A1%E7%AE%97 ...

  10. 【Zabbix】配置zabbix agent向多个server发送数据

    1.背景: server端: 172.16.59.197  ,172.16.59.98 agent 端: hostname:dba-test-hzj02 IP:172.16.59.98 2.方式: 配 ...