codeforces 27E . Number With The Given Amount Of Divisors 搜索+数论

题目链接

首先要知道一个性质, 一个数x的因子个数等于 a1^p1 * a2^p2*....an^pn, ai是x质因子, p是质因子的个数。

然后就可以搜了

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int mod = 1e9+7;
const int inf = 1061109567;
const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
int n, f[105], prime[20], cnt;
ll ans = 1e18+2;
void dfs(int pos, int num, ll val) {
    if(pos>16)
        return ;
    if(num>n)
        return ;
    if(num == n) {
        ans = min(ans, val);
        return ;
    }
    for(int i = 1; i<=60; i++) {
        val *= prime[pos];
        if(val>ans)
            break;
        dfs(pos+1, num*(i+1), val);
    }
}
int main()
{
    cin>>n;
    for(int i = 2; i<100; i++) {
        if(!f[i]) {
            for(int j = i+i; j<100; j+=i) {
                f[j] = 1;
            }
            prime[cnt++] = i;
        }
    }
    dfs(0, 1, 1);
    cout<<ans<<endl;
    return 0;
}
时间: 2024-10-01 06:51:45

codeforces 27E . Number With The Given Amount Of Divisors 搜索+数论的相关文章

CF 27E Number With The Given Amount Of Divisors

A - Number With The Given Amount Of Divisors Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description Given the number n, find the smallest positive integer which has exactly n divisors. It is guaranteed

【数学】【CF27E】 Number With The Given Amount Of Divisors

传送门 Description 给定一个正整数\(n\),输出最小的整数,满足这个整数有n个因子 Input 一行一个整数\(n\) Output 一行一个整数,代表答案. Hint \(1~\leq~n~\leq~1000\).保证答案不超过\(10^{18}\) Solution 经典题. 引理: 对于一个唯一分解式形如\(x=p_1^{c_1}p_2^{c_2}p_3^{c^3}\cdots p_k^{c_k}\)的数字\(x\),则其因数个数为\(\prod(c_i+1)\). 证明:

Codeforces 346C Number Transformation II 构造

题目链接:点击打开链接 = = 990+ms卡过 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #include<vector> #include<set> using namespace std; #define N 100010 #define L(x) (x<<1) #define R(x) (x<<

codeforces Hill Number 数位dp

http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits:  200000 KB 64-bit interger IO format:  %lld   Java class name:  Main Description A Hill Number is a number whose digits possibly rise and then possibl

Codeforces E. Number Table

题目链接:http://codeforces.com/problemset/problem/40/E 妙啊... 因为已经确定的格子数目严格小于了$max(n,m)$,所以至少有一行或者一列是空着的,那么除了这一行或者这一列的格子,其余的格子随意填,只要满足了当且对应的行(列)的积是$-1$就好了,用组合数算一算就好了,剩下的空着的一行或者一列用于首尾,可以发现它当且仅有一种放发. 考虑无解:如果$n+m$为奇数,同时还要注意一下如果$n=1$,或者$m=1$的情况 1 #include<ios

Codeforces 251C Number Transformation

Number Transformation 我们能发现这个东西是以2 - k的lcm作为一个循环节, 然后bfs就好啦. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pair<int,

CodeForces 346C Number Transformation II

Number Transformation II 题解: 对于操作2来说, a - a % x[i] 就会到左边离a最近的x[i]的倍数. 也就是说 [ k * x[i] + 1,  (k+1)* x[i] -1 ]这段区间的的数都会走到 k * x[i]上. 所以对于每个位置都先计算出他到右边最远的覆盖位置. 然后在反着求出每个位置能往左走走到的最远的位置. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freo

[CodeForces 466C] Number of Ways

Given an array that has n integers, count the number of ways to split all elements of this array into 3 contiguous parts so that the sum of each part is the same. Each part must not be empty. Algorithm: O(N) runtime 1. If total sum % 3 != 0, return 0

Codeforces 235E Number Challenge

题目大意 求  ,d是约数个数函数.答案对1073741824 (2^30)取模. 题解 首先我们令f(i)为前两维乘积是i的个数. 那么我们有 你需要知道这么一个式子 这个公式很经典就不加赘述了.之后是愉快的推倒.为了方便令 转换枚举对象枚举x,y 接下来就是喜闻乐见的反演 转换枚举对象的套路 这样就可以ablogab来求了.我极限数据没跑过去直接打的表--惨--人傻自带大常数-- 1 #include<iostream> 2 #include<cstdio> 3 #includ