题目链接


题目大意

 给定a,b,c,d四个数,其中a<c,b<c,现在让你寻找一对数(x,y),满足一下条件:

 1. a<x<c,b<y<d

 2. (x*y)%(a*b)==0


题目思路

 因为(x*y)%(a*b)==0\(\rightarrow\)x*y\(~\)=\(~\)k*a*b\(~\)=\(~\)k*k1*k2

 所以我们要找的就是a,b的因子来保证a%k1\(~\)||\(~\)a%k2\(~\)||\(~\)b%k1\(~\)||\(~\)b%k2为0

 而每个数都能被拆成多个质因子的k次的乘积,也就是说:

 a\(~\)=\(~\)P\(_{1}\)\(^{k1}\)\(~\)*\(~\)P\(_{2}\)\(^{k2}\)\(~\)*\(~\)P\(_{3}\)\(^{k3}\)\(~\)*....*\(~\)P\(_{n}\)\(^{kn}\)

 b\(~\)=\(~\)S\(_{1}\)\(^{k1}\)\(~\)*\(~\)S\(_{2}\)\(^{k2}\)\(~\)*\(~\)S\(_{3}\)\(^{k3}\)\(~\)*....*\(~\)S\(_{n}\)\(^{kn}\)

\(~~~\)而且在质因子较少,便于搜索,所以我们直接拆出a,b的质因子去爆搜看能不能找到对应的x,y


代码详情

# include<iostream>
# include<bits/stdc++.h>
using namespace std;
# define int long long
# define endl "\n"
const int N = 5e5 + 10;
map<int, int> mp;
vector<pair<int, int>> fac;
int a, b, c, d;
bool ok = false;
void fj(int n) //分解质因数
{
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) {
int cnt = 0;
while (n % i == 0) {
n /= i;
cnt++;
}
mp[i] += cnt;//保存质因数的次数k
}
}
if (n > 1) mp[n]++;
}
int ans_x, ans_y;
void dfs(int id, int k1, int k2) {
if (id == fac.size()) {
int x = ((a / k1) + 1) * k1;
int y = ((b / k2) + 1) * k2;
if (x <= c && y <= d) {
ok = true;
ans_x = x;
ans_y = y;
}
return;
}
int p = fac[id].first, cnt = fac[id].second;
int pow = 1;
for (int i = 1; i <= cnt; ++i) pow *= p;
int res = 1;
for (int i = 0; i <= cnt; ++i) {
dfs(id + 1, k1 * res, k2 * (pow / res));
res *= p;
}
}
void solve() {
mp.clear(), fac.clear();
ok = false;
cin >> a >> b >> c >> d;
fj(a);
fj(b);
for (auto p : mp) fac.push_back(p);
dfs(0, 1, 1);
if (ok) cout << ans_x << " " << ans_y << endl;
else cout << -1 << " " << -1 << endl;
}
int tt;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
tt = 1; cin >> tt;
while (tt--)solve();
return 0;
}

最新文章

  1. eclipse maven plugin 插件 安装 和 配置
  2. openstack 排错
  3. UVa120 - Stacks of Flapjacks
  4. AMQ学习笔记 - 09. Spring-JmsTemplate之接收
  5. jquery效果- 显示和隐藏 淡入淡出 滑动 隐藏
  6. 【转】android JNI编程 一些技巧(整理)
  7. Tomcat7+Redis存储Session(转)
  8. HDU 5416 CRB and Tree
  9. js 创建对象
  10. Oracle EBS-SQL (QA-2):检查接收未检验.SQL
  11. 【BZOJ3994】约数个数和(莫比乌斯反演)
  12. JdbcTemplate源码解析
  13. jhipster安装_Windows
  14. SQL Server等待事件—RESOURCE_SEMAPHORE_QUERY_COMPILE
  15. rabbitmq消费端加入精确控频。
  16. confluence与jira账号对接、查看到期时间及问题总结
  17. 【JEECG技术文档】JEECG在线聊天插件功能集成文档
  18. 【git】gitignore
  19. 京东全链路压测军演系统(ForceBot)架构解密
  20. MySQL学习笔记:时间差

热门文章

  1. 记一次twikoo引发的站点重大事故
  2. HTML &lt;option&gt; 标签的属性:selected ; disabled ; label ; value;
  3. Python自学教程8-数据类型有哪些注意事项
  4. 钓鱼利用-CVE-2018-20250
  5. 【Java】学习路径60-利用TCP协议接收多个客户端的数据
  6. open-falcon安装配置
  7. Java中一些必须要知道的东西
  8. 【gRPC】C++异步服务端客户端API实例及代码解析
  9. 使用cnpm创建vue项目(含离线安装)
  10. 《Thinking In Java》作者:不要使用并发!