• 题意:有两个数\(p\)和\(q\),找到一个最大的数\(x\),使得\(p\ mod\ x=0\)并且\(x\ mod\ q\ne 0\).

  • 题解:首先,如果\(p\ mod\ q\ne0\),那么我们可以让\(x=p\)就行了,否则,就意味着,\(p\)可以被\(q\)整除,也就是说\(p\)的质因子包含了\(q\)的所有质因子,我们可以对\(q\)进行质因子分解,我们要求的\(x\)不能包含\(q\)的所有质因子(带次数),然后可以去枚举\(q\)的质因子,我们要让\(p\)的质因子不包含\(q\)的所有质因子,最佳的方法是,将\(p\)中与\(q\)枚举到的质因子的次数变为\(q\)中枚举的减一即可,因为这样\(p\)中与\(q\)相同的质因子次数比\(q\)的小,必然不能被\(q\)整除,那么我们就可以让\(x\)为现在的\(p\).

  • 代码:

    int t;
    ll p,q; ll fpow(ll a,ll k){
    ll res=1;
    while(k){
    if(k&1) res=res*a;
    k>>=1;
    a*=a;
    }
    return res;
    } int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>t;
    while(t--){
    cin>>p>>q;
    ll ans=0;
    if(p%q!=0){
    cout<<p<<'\n';
    continue;
    } ll cur=q; for(ll i=2;i*i<=cur;++i){
    ll cnt=0;
    if(q%i==0){
    while(q%i==0){q/=i;cnt++;}
    ll tmp=p;
    while(tmp%i==0){tmp/=i;}
    ans=max(ans,tmp*fpow(i,cnt-1));
    }
    }
    if(q>1){
    ll tmp=p;
    while(tmp%q==0) tmp/=q;
    ans=max(ans,tmp);
    } cout<<ans<<'\n';
    } return 0;
    }

最新文章

  1. h5自定义audio(问题及解决)
  2. 基于log4net的帮助类Log
  3. 【状压DP】bzoj1087 互不侵犯king
  4. UDP&quot;打洞&quot;原理
  5. [团队项目3.0]Scrum团队成立
  6. SLF4J日志门面
  7. JVM生产环境参数实例及分析
  8. Scrum敏捷开发简介
  9. [LeetCode] Add Digits (a New question added)
  10. poj2192
  11. Delphi中DLL的其他应用
  12. ios打包ipa的四种实用方法
  13. 深入解析spring中用到的九种设计模式
  14. Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&amp;流程分析
  15. 单例模式(Singleton)看了就懂
  16. PowerApps 经验总结
  17. web端/h5端账号密码的安全性问题
  18. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
  19. junit测试
  20. 负载均衡集群中的session解决方案【转】

热门文章

  1. Nginx 安装与配置教程
  2. 【Problems】端口被占用 查看是被谁占用并关闭它
  3. 剑指 Offer 27. 二叉树的镜像
  4. K8s遇到问题解决思路
  5. 下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。
  6. 3、剑指offer-数组——数组中重复的数字
  7. Python_1生成器(下)之单线并行--生产着消费者模型
  8. Python 代码的加密混淆
  9. C++ Primer Plus读书笔记(三)复合类型
  10. Golang--Directional Channel(定向通道)