题目大意是:给两个正整数:x,z。其中z一定是x的倍数。让你求正整数y,满足:
1.z是x和y的最小公倍数
2.在满足1的情况下要求y最小
样例:
输入: 24 360
输出: 45
数据范围:
其中30%的数据 :z<=10^3
其中30%的数据 :z<=10^6
其中20%的数据 :z<=10^10
其中100%的数据:z<=10^18
本蒟蒻的思路是分解质因数,如果对于一个质因数i,z的质因数i的个数为s,x的质因数i的个数为s1。若s>s1,那么y乘上i^s。最后输出
但奈何败在最后一个数据点上
蒟蒻程序:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long x,y=1,z;
scanf("%lld%lld",&x,&z);
for(long long i=2; i<=z; i++){
int s=0,s1=0;
while(x%i==0){
s++;
x=x/i;
}
while(z%i==0){
s1++;
z=z/i;
}
if(s<s1)y=y*(long long)pow(i,s1);
if(x==1){
y=y*z;
break;
}
}
printf("%lld",y);
return 0;
}