A. Division

time limit per test1 second

memory limit per test512 megabytes

inputstandard input

outputstandard output

Oleg's favorite subjects are History and Math, and his favorite branch of mathematics is division.

To improve his division skills, Oleg came up with \(t\) pairs of integers \(p_i\) and \(q_i\) and for each pair decided to find the greatest integer \(x_i\), such that:

\(p_i\) is divisible by \(x_i\);

\(x_i\) is not divisible by \(q_i\).

Oleg is really good at division and managed to find all the answers quickly, how about you?

Input

The first line contains an integer \(t\) \((1\leq t\leq 50)\) — the number of pairs.

Each of the following \(t\) lines contains two integers \(p_i\) and \(q_i\) (\(1≤p_i≤10^18\); \(2≤q_i≤10^9\)) — the \(i-th\) pair of integers.

Output

Print \(t\) integers: the \(i-th\) integer is the largest \(x_i\) such that \(p_i\) is divisible by \(x_i\), but xi is not divisible by \(q_i\).

One can show that there is always at least one value of xi satisfying the divisibility conditions for the given constraints.

Example

input

3

10 4

12 6

179 822

output

10

4

179

SOLUTION

这还算一道良心数学题

首先我们发现,我们先把p, q质因数分解,有如下结果:

\(p = a_1^p_1 \times a_2^p_2\times ... \times a_m^p_m \times ... a_n^p_n\)

\(q = a_1^q_1 \times a_2^q_2\times ... \times a_m^q_m\)

其中, \(m<n\)

注意,当\(p mod q!=0\), 答案就是\(p\)

当\(p mod q=0\)

就是任意小于\(m\)的数\(i\),\(q_i <= p_i\)

于是,我们就只要考虑前\(m\)个质因数

我们只要对于\(p\)的任意一个质因数,\(p_i\)变成\(q_i-1\),就是一个符合条件的答案

求出最大的,我们只需要考虑变化代价最小的计算出来就好了

Code

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define _(d) while(d(isdigit(ch=getchar())))
template <class T> void g(T&t){T x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;t=f*x;}
typedef unsigned long long ll;
const int N = 1e5+4;
int pri[N], tot, vis[N];
ll p,q,ans;
void pre(){
int End = sqrt(1e9)+1;
for(int i=2; i <= End; i++){
if(!vis[i]) pri[++tot]=i;
for(int j=1; j <= tot; j++){
if( i*pri[j] > End ) break;
vis[i*pri[j]] = 1;
if( i%pri[j] == 0 ) break;
}
}
} int st[N], tp, num1[N], num2[N];
ll s1[N], s2[N]; int main(){
int T; g(T);
pre();
// rep(i,1,10) cout<<pri[i]<<endl;
while(T--){
g(p), g(q);
if( p%q ) ans = p;
else{
tp = 0; ll nowq = q; ans = 0;
for( int i=1; pri[i]*pri[i] <= nowq && i<=tot; i++ ){
if( nowq % pri[i] == 0 ){
st[++tp] = pri[i]; s1[tp] = 1;
while( nowq % pri[i] == 0 ){
// puts("orz");
nowq /= pri[i];
s1[tp] *= pri[i];
}
}
}
if( nowq >1 ) st[++tp] = nowq, s1[tp] = nowq;
ll nowp = p;
for( int i=1; i <= tp; i++ ){
ll tmp = nowp / s1[i]; s2[i] = s1[i];
while( tmp % st[i] == 0 ){
// puts("orz");
s2[i] *= st[i];
tmp /= st[i];
}
nowp = tmp;
}
ll mn = 1e18;
for( int i=1; i <= tp; i++ ){
// cerr<<s1[i]<<endl;
s2[i] = s2[i]/s1[i]*st[i];
mn = min( mn, s2[i] );
}
ans = p/mn;
}
printf("%llu\n",ans);
}
return 0;
}

水题挑战6: CF1444A DIvision的更多相关文章

  1. 水题挑战4: luogu P1280 尼克的任务

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为 \(n\) 分钟,从 ...

  2. 【做题记录】CF1444A Division

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

  3. 水题挑战3: NOIP 2017 宝藏

    参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...

  4. 水题挑战1:NOIP 2013 选择客栈

    丽江河边有\(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号.每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 \sim k-1\) 表示),且 ...

  5. 水题挑战2 :NOIP提高组 2011 聪明的质监员

    小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从\(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) .检验矿 ...

  6. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem A: The 3n + 1 problem(水题)

    Problem A: The 3n + 1 problem Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 14  Solved: 6[Submit][St ...

  7. 烟大 Contest1025 - 《挑战编程》第二章:数据结构 Problem A: Jolly Jumpers(水题)

    Problem A: Jolly Jumpers Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 10  Solved: 4[Submit][Status] ...

  8. codeforcess水题100道

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

  9. CF1444A Division 求质因数的方法

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

随机推荐

  1. 使用响应扩展的响应面(Rx)

    下载demo - 196 KB 下载source - 98 KB 表的内容 系统要求反应面一个简单的计时器从事件中收集数据序列使用更复杂的查询订阅您希望完成的面最终考虑历史 介绍 "Rx&q ...

  2. Mac Idea你不知道的秘密

    导读 工欲善其事必先利其器,日常工作中,知道这些Idea技巧,可以极大提高日常开发效率. 技巧篇 以下内容不分先后顺序 显示类中的方法 搜索 搜索方法,按两下shift 文字搜索,control+sh ...

  3. RHSA-2017:1931-中危: bash 安全和BUG修复更新(代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  4. 多测师讲解自动化测试_rf运行无日志(解决方法)_高级讲肖sir

    rf运行无日志(解决方法) 出现现象: 方法: 1.先在套件里面导入OperatingSystem库 2.在套件中新建一个关键字套件点击右键选择new user keyword关键 字的名称为:kil ...

  5. 多测师_肖sir_git _004(版本控制器)

    gitgit 是一个开源的分布式版本控制系统,用于敏捷高效的处理任何大小的项目.git是linux torvalds 为了帮助管理linux内核开发的一个开放源码的版本控制软件.git与常用的版本控制 ...

  6. Markdown语法及使用方法完整手册

    欢迎使用 Markdown在线编辑器 MdEditor Markdown是一种轻量级的「标记语言」 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容 ...

  7. ES异常处理-NoNodeAvailableException

    1.问题描述 ES client客户端能创建,但是在用客户端操作时报:NoNodeAvailableException[None of the configured nodes are availab ...

  8. nginx安全:配置网站图片防盗链

    一,为什么要做防盗链? 1,什么是盗链? 比如某人有一个A网站, 他不愿自己存储图片,(因为磁盘和带宽都有成本) 就在自己A网站的页面上直接插入B网站的图片, 从而为自己吸引流量,这就是盗链 2,为什 ...

  9. docker19.03制作一个基于centos8的带有nfs4服务的镜像

    一,下载centos的image 1,下载centos最新image [root@localhost ~]# docker pull centos 2,查看是否成功下载到本地image [root@l ...

  10. css中伪元素before或after中content的特殊用法attr【转】

    [原文]https://segmentfault.com/a/1190000002750033 CSS中主要的伪元素有四个:before/after/first-letter/first-line,在 ...