题目:
1.p和q都不大,直接遍历求出所有的因数。
2.原计划遍历到p/2或者q/2的,但是发现当p==1或者q==1时,会直接跳出没有遍历,于是直接改为遍历到p或q。
测试用例:1 1
输出应该为:1 1
描述
Give you two integers P and Q. Let all divisors of P be X-coordinates. Let all divisors of Q be Y-coordinates.
For example, when P=6 and Q=2, we can get the coordinates (1,1) (1,2) (2,1) (2,2) (3,1) (3,2) (6,1) (6,2).
You should print all possible coordinates in the order which is first sorted by X-coordinate when coincides, sorted by Y-coordinate.
输入
One line with two integers P and Q(1 <= P, Q <= 10000).
输出
The output may contains several lines , each line with two integers Xi and Yi, denoting the coordinates.
- 样例输入
-
6 2
- 样例输出
-
1 1 1 2 2 1 2 2 3 1 3 2 6 1 6 2
AC代码:
[c language=”++”]
/*
题目:
1.p和q都不大,直接遍历求出所有的因数。
2.原计划遍历到p/2或者q/2的,但是发现当p==1或者q==1时,会直接跳出没有遍历,于是直接改为遍历到p或q。
*/
/*
测试用例:
1 1
正确答案:
1 1
*/
#include<string>
#include <iomanip>
#include<fstream>
#include<set>
#include<queue>
#include<map>
//#include<unordered_set>
//#include<unordered_map>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
//#include<stack>
#include<vector>
#include <algorithm>
using namespace std;
/*
函数名 :main
函数功能:主函数
*/
int main(void)
{
int p, q;
cin >> p>>q;
set<int> pDivisors;
set<int> qDivisors;
//求出所有的因数
for (int i = 1; i <= max(p, q); i++)
{
if (p%i == 0)
{
pDivisors.insert(i);
pDivisors.insert(p / i);
}
if (q%i == 0)
{
qDivisors.insert(i);
qDivisors.insert(q / i);
}
}
//进行输出
vector<int> qDiv(qDivisors.size(), 0);
int i = 0;
for (set<int>::iterator ite = qDivisors.begin(); ite != qDivisors.end(); ite++,i++)
{
qDiv[i] = *ite;
}
for (set<int>::iterator ite = pDivisors.begin(); ite != pDivisors.end(); ite++)
{
for (int j = 0; j < qDiv.size(); j++)
{
printf("%d %d\n", *ite, qDiv[j]);
}
}
return 0;
}
[/c]