题目链接:点击打开链接
反素数:点击打开链接
爆搜幂即可。
#include <iostream> #include <cstdio> #include <string.h> #include <algorithm> #include <cmath> #include <vector> #include <queue> #include <set> #include <stack> #include <string> #include <map> #include <ctime> template <class T> inline bool rd(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0; while (c != '-' && (c<'0' || c>'9')) c = getchar(); sgn = (c == '-') ? -1 : 1; ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0'); ret *= sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if (x>9) pt(x / 10); putchar(x % 10 + '0'); } typedef long long ll; using namespace std; const ll inf = ((ll)1) << 60; const int INF = 100000000; const int N = 100000; const int mod = 1e7; ll prime[] {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53}; ll n, ans, siz; void dfs(ll mul, ll cnt, int pre, int id){ //mul是当前的数,cnt记录mul的因子个数:因子个数为素数的幂相乘 if (mul > n)return; if (cnt == siz) ans = min(ans, mul); if (cnt > siz) ans = mul, siz = cnt; for (int i = 1; i <= pre; i++) { mul *= prime[id]; if (mul > n)break; dfs(mul, cnt * (i+1), i, id + 1); } } int main(){ int T, Cas = 1; rd(T); while (T--){ rd(n); printf("Case #%d: ", Cas++); ans = siz = 0; dfs(1, 1, 50, 0); pt(ans); puts(""); } return 0; }
时间: 2024-10-10 14:00:51