zoukankan      html  css  js  c++  java
  • Codeforces 1445C. Division(分解质因数)

    Codeforces 1445C. Division

    题目大意

    • 给出 p , q p,q p,q,求最大的 x x x使得 x x x能被 p p p整除但 q q q不能被 x x x整除。
    • p ≤ 1 0 18 pleq 10^{18} p1018 2 ≤ q ≤ 1 0 9 2leq qleq 10^9 2q109

    题解

    • 可以先令 x = p x=p x=p,若不满足第二个条件则不断把 x x x改小,
    • 显然为了满足 x x x仍旧是 p p p的约数,每次要让 x x x除以某个数,
    • 为了让第二个条件成立,需要 q q q分解质因数后某一项 c k c^k ck x x x中只有 c k ′ ( k ′ < k ) c^{k'}(k'<k) ck(k<k)
    • 而且为了 x x x尽可能大,所以只需要某一个质因数满足即可,
    • 那么枚举 q q q的每个质因数,把 x x x一直除以它直到条件成立,在所有这样操作后的 x x x中取最大值。

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define ll long long
    int main() {
    	int tn;
    	scanf("%d", &tn);
    	while(tn--) {
    		ll p, q, i;
    		scanf("%lld%lld", &p, &q);
    		ll Q = q;
    		ll t = 0;
    		for(i = 2; i * i <= q; i++) if(q % i == 0) {
    			while(q % i == 0) q /= i;
    			ll ss = p, l = 1;
    			while(ss % Q == 0 && ss % i == 0) ss /= i, l *= i;
    			t = max(t, ss);
    		}
    		if(q > 1) {
    			ll ss = p, l = 1;
    			while(ss % Q == 0 && ss % q == 0) ss /= q, l *= q;
    			t = max(t, ss);
    		}
    		printf("%lld
    ", t);
    	}
    	return 0;
    }
    
    
    哈哈哈哈哈哈哈哈哈哈
  • 相关阅读:
    详解JavaScript中的闭包
    Javascript中的apply与call
    JS中for循环变量作用域
    KEEP!
    弹性盒子模型
    JS继承的原理、方式和应用
    js
    JS时间格式和时间戳的相互转换
    Jquery的简单API
    js中判断数组中是否包含某元素的方法
  • 原文地址:https://www.cnblogs.com/LZA119/p/14279516.html
Copyright © 2011-2022 走看看