Codeforces Round #696 (Div. 2) B. Different Divisors
B. Different Divisors#
题意#
组数据,每组数据给定一个数字 ,求出一个最小的数字 满足 至少有 个因数,并且任意两个因数之差大于等于
数据范围#
SOLUTION#
由于至少有 个因数,并且任意两个因数之差大于等于 ,容易得出因数越多越劣。因此考虑枚举 除了 之外 的两个因数 ,由于 只有 个因数,因此 都是质数,并且 ,考虑预处理质因数,二分求解 即可。
CODE#
点击查看代码
/* Generated by powerful Codeforces Tool
* Author: SmartNanfeng
* Time: 2022-09-08 22:35:01
**/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#ifdef LOCAL
#include <debugger>
#else
#define debug(...) 42
#endif
template <typename T> void chkmax(T &x, T y) { x = max(x, y); }
template <typename T> void chkmin(T &x, T y) { x = min(x, y); }
constexpr int N = 3E4 + 10;
int primes[N], cnt;
bool st[N];
void init() {
int n = N - 1;
for (int i = 2; i <= n; i ++ ) {
if (!st[i]) primes[cnt ++ ] = i;
for (int j = 0; primes[j] <= n / i; j ++ ) {
st[primes[j] * i] = true;
if (i % primes[j] == 0) {
break;
}
}
}
}
void solve2() {
int d; cin >> d;
int idx = lower_bound(primes, primes + cnt, d + 1) - primes;
int x = primes[idx];
idx = lower_bound(primes, primes + cnt, x + d) - primes;
int y = primes[idx];
cout << x * y << "\n";
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
init();
int T = 1; cin >> T;
while (T --) solve2();
return 0;
}
/*
*
* ┏┓ ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃ ┃
* ┃ ━ ┃ ++ + + +
* ████━████+
* ◥██◤ ◥██◤ +
* ┃ ┻ ┃
* ┃ ┃ + +
* ┗━┓ ┏━┛
* ┃ ┃ + + + +Code is far away from
* ┃ ┃ + bug with the animal protecting
* ┃ ┗━━━┓ 神兽保佑,代码无bug
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛ + + + +
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛+ + + +
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现