基準時間限制:1 秒 空間限制:131072 kb 分值: 40
把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1-n中複雜程度最高的那個數。
例如:12的約數為:1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。
input
第1行:乙個數t,表示後面用作輸入測試的數的數量。(1 <= t <= 100)
第2 - t + 1行:t個數,表示需要計算的n。(1 <= n <= 10^18)
output
共t行,每行2個數用空格分開,第1個數是答案,第2個數是約數的數量。
input示例
5 1
10 100
1000
10000
output示例
1 1
6 4
60 12
840 32
7560 64
思路:假設我們知道在範圍中x是我們要的答案,那麼我們唯一分解定理展開一下: x=
pa11
pa22
...p
akk x=p
1a1p
2a2.
..pk
ak
假設p1到pk從小到大,我們觀察一下a1到ak的性質,發現:設
i<
j,若p
ip
i
則必然a
i>=aj
a
i>=aj
, 證明是反證法,假設ai
a
i
,那麼我們把ai和aj對調,對因子總數不會發生變化,但是x的大小反而會跟小,也就是說答案不會更差,得證。算是貪心的思想。
**:
#include
#include
#include
#include
#include
#define ull unsigned long long
#define ll long long
#define ul unsigned int
#define maxn 60
using
namespace
std;
int prime[maxn];
bool isp[maxn];
int cnt=0;
void init()
for(int j=0;jtrue;
if(i%prime[j]==0)break;}}
}ll n;
ll ans;
ll _max;
void dfs(int cur,int limit,ll temp,ll d)
ll now=temp;
for(int i=1;i<=limit;i++)
}int main()
51Nod 1060 最複雜的數
把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2 t 1行 t個數...
51nod 1060 最複雜的數
1060 最複雜的數 ural 1748 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個...
最複雜的數 51Nod 1060
反素數反素數 8005979?fr aladdin 題目等價於求1 n內最大的反素數 由其兩個性質 可以直接爆搜 還有注意細節處理 判斷當前值乘某個素因子是否符合條件時 要兩邊同除該素因子 否則爆long long include using namespace std define ll long...