Codeforces 27E Number With The Given Amount Of Divisors (求約數個數為n的最小數)
Number With The Given Amount Of Divisors
time limit per test:2 seconds
memory limit per test:256 megabytes
題目連結:http://codeforces.com/problemset/problem/27/E
題目大意:給一個數字n,求一個最小的數使得它的約數個數為n
題目分析:答案不超過1e18,首先假設每個素數都是一次冪,則前17個素數相乘就超出範圍了,因此只需要取前16個素數,其次對於最小的素數2,2的63次方剛好是範圍內的臨界值,因此,只需要列舉DFS即可,三個引數pos表示當前素數,val表示當前數值,num表示當前數字約數的個數,注意幾個剪枝,當val *p[pos] > ans或者約數個數已經大於n時,直接break,因為素數表是從小到大的,又因為要求約數個數恰好為n,因此如果num*(i + 1)不是n的約數,也不會得到n,就不用繼續搜了
Given the number n, find the smallest positive integer which has exactlyn divisors. It is guaranteed that for the givenn the answer will not exceed 1018.
Input
The first line of the input contains integer n (1 ≤ n ≤ 1000).
Output
Output the smallest positive integer with exactlyn divisors.
Sample test(s)
Input
4
Output
6
Input
6
Output
12
題目連結:http://codeforces.com/problemset/problem/27/E
題目大意:給一個數字n,求一個最小的數使得它的約數個數為n
題目分析:答案不超過1e18,首先假設每個素數都是一次冪,則前17個素數相乘就超出範圍了,因此只需要取前16個素數,其次對於最小的素數2,2的63次方剛好是範圍內的臨界值,因此,只需要列舉DFS即可,三個引數pos表示當前素數,val表示當前數值,num表示當前數字約數的個數,注意幾個剪枝,當val *p[pos] > ans或者約數個數已經大於n時,直接break,因為素數表是從小到大的,又因為要求約數個數恰好為n,因此如果num*(i + 1)不是n的約數,也不會得到n,就不用繼續搜了
#include <cstdio>
#include <iostream>
#define ull unsigned long long
using namespace std;
ull n, ans;
int p[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
void DFS(int pos, ull val, ull num)
{
if(num > n || pos > 15)
return;
if(num == n)
{
ans = min(ans, val);
return;
}
for(int i = 1; i <= 63; i++)
{
if(val > ans / p[pos] || num * (i + 1) > n)
break;
val *= p[pos];
if(n % (num * (i + 1)) == 0)
DFS(pos + 1, val, num * (i + 1));
}
return;
}
int main()
{
cin >> n;
ans = 1ull << 63;
DFS(0, 1, 1);
cout << ans << endl;
}
相關文章
- 杭電OJ 2028求n個數的最小公倍數
- 求三個數的最小公倍數
- 求最小k個數
- 3516 求n個整數的最小值 迴圈結構
- 求兩個正整數的最大公約數與最小公倍數--C#實現C#
- 3069 求n個整數的和
- 求十個連續最小自然數,非素數。
- 用遞迴求出最大公約數和最小公倍數,求補充最小公倍數的遞迴用法遞迴
- 劍指offer:輸入n個整數,找出其中最小的K個數。
- 最大公約數,最小公倍數
- 最小公倍數&&最大公約數
- 一個數number的n次冪 python的pow函式Python函式
- 求最大公約數 & 最大公約數
- 最大公約數和最小公倍數
- 最小公倍數和最大公約數
- [SPOJ]DIVCNTK - Counting Divisors[數論]
- Python求最小公倍數Python
- 【數學問題】最大公約數與最小公倍數
- 求完全數個數
- C語言 用更相減損術求最大公約數,最小公倍數C語言
- 約數個數定理
- # 2024_8_4 求單調上升總和為n的數列的方案數
- C++:最小公倍數與最大公約數C++
- python語言程式設計——求最大公約數和最小公倍數演算法Python程式設計演算法
- n個骰子的點數
- 統計整數區間[N,M](N,M<100000)中所以非偶數的合數個數,並輸出這個數。
- 演算法設計與分析:求兩個自然數的最大公約數演算法
- 求1到n範圍內能被5或6或8 整除的數的個數.
- 為什麼以a為底,n的對數(以b為底)為指數的冪等於以n為底,a的對數(以b 為底)為指數的冪?
- 指標-n個數的排序指標排序
- ALGO-201 大等於n的最小完全平方數Go
- 023 Given an integer n. get the number of 0, 2, 4 from all the values from [0, n]
- 引數為二叉樹和一個整數,求所有和為該整數的路徑二叉樹
- JZ-029-最小的 K 個數
- 1304 和為零的N個唯一整數
- 輸入N,再輸入N個數,N
- 面試官:來寫個程式碼求一下兩個數的最大公約數吧面試
- Perfect Number 完美數
- Python Number(數字)Python