作者:mobiledu2502917563 | 来源:互联网 | 2023-09-24 15:53
文章目录ResultResultResultHyperlinkHyperlinkHyperlinkDescriptionDescriptionDescriptionSolution
文章目录
- ResultResultResult
- HyperlinkHyperlinkHyperlink
- DescriptionDescriptionDescription
- SolutionSolutionSolution
- CodeCodeCode
ResultResultResult
HyperlinkHyperlinkHyperlink
http://codeforces.com/contest/1444/problem/A
DescriptionDescriptionDescription
TTT组数据,每组数据给定A,BA,BA,B,问满足是AAA的约数但不是BBB的倍数的最大的正整数
数据范围:T≤50,A≤1018,B≤109T\leq 50,A\leq 10^{18},B\leq 10^9T≤50,A≤1018,B≤109
SolutionSolutionSolution
- 若A=BA=BA=B,答案即为AAA的除去本身的最大约数
- 若AA<B&#xff0c;答案为AAA
- 若A>BA>BA>B&#xff0c;若AAA不是BBB的倍数答案为AAA
否则&#xff0c;对BBB分解质因数&#xff0c;去除到AAA的该此项小于BBB即可
时间复杂度&#xff1a;O(TB)O(T\sqrt B)O(TB)
CodeCodeCode
#include
#include
#include
#include
#define LL long long
using namespace std;int T;
LL a,b,res;
inline LL read()
{LL d&#61;1,f&#61;0;char c;while(c&#61;getchar(),!isdigit(c)) if(c&#61;&#61;&#39;-&#39;) d&#61;-1;f&#61;(f<<3)&#43;(f<<1)&#43;c-48;while(c&#61;getchar(),isdigit(c)) f&#61;(f<<3)&#43;(f<<1)&#43;c-48;return d*f;
}
signed main()
{T&#61;read();while(T--){a&#61;read();b&#61;read();if(a&#61;&#61;b){for(register int i&#61;2;i*i<&#61;b;i&#43;&#43;)if(a%i&#61;&#61;0){printf("%lld\n",a/i);goto loop;}puts("1");continue;}if(a>b) {if(a%b!&#61;0) {printf("%lld\n",a);continue;}LL k&#61;a/b,B&#61;b;res&#61;0;for(register int i&#61;2;i*i<&#61;b;i&#43;&#43;) if(b%i&#61;&#61;0) {LL A&#61;a,now&#61;1;int tot1&#61;0,tot2&#61;0;while(A%i&#61;&#61;0) A/&#61;i,tot1&#43;&#43;;while(b%i&#61;&#61;0) b/&#61;i,tot2&#43;&#43;,now*&#61;i;now/&#61;i;LL p&#61;A*now;res&#61;max(res,p);}if(b!&#61;1) {while(a%b&#61;&#61;0) a/&#61;b;res&#61;max(res,a);}printf("%lld\n",res);}else printf("%lld\n",a);loop:;}
}