51nod 最複雜的數 (簡單搜尋)

2021-08-26 05:24:59 字數 1592 閱讀 8466

基準時間限制: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...