学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
我们称两个数字的最小公倍数的质因数为这两个数的最小公倍质因数,比如:9与21的最小公倍数是63,63有3与7这两个质因数,因此3与7为9与21的最小公倍质因数。
现在小猴有n对正整数,他希望你对于每一对数 x i , y i x_i,y_i xi,yi,从小到大依次输出它们最小公倍质因数,请你帮它解决。
【输入】
第一行一个正整数n;
接下来n行,每行两个正整数 x i , y i x_i,y_i xi,yi。
【输出】
对于每一对 x i , y i x_i,y_i xi,yi,从小到大依次输出它们的最小公倍质因数,用空格隔开,最后换行,如果一对 x i , y i x_i,y_i xi,yi没有最小公倍质因数,输出“None”。
【输入样例】
2
2 3
9 21
【输出样例】
2 3
3 7
【代码详解】
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int n, a, b, num[N+10], cur;
void cal(int x)
{
for (int i=2; i*i<=x; i++) {
while (x%i==0) {
cur++;
num[cur] = i;
x /= i;
}
}
if (x>1) {
cur++;
num[cur] = x;
}
}
void work()
{
cur = 0;
cal(a);
cal(b);
if (cur==0) {
cout << "None" << endl;
return;
}
sort(num+1, num+1+cur);
for (int i=1; i<=cur; i++) {
if (num[i]!=num[i-1]) {
cout << num[i] << " ";
}
}
cout << endl;
}
int main()
{
cin >> n;
while (n--) {
cin >> a >> b;
work();
}
return 0;
}
【运行结果】
2
2 3
2 3
9 21
3 7