HDU1999不可摸數 暴力打表

2021-09-29 07:58:12 字數 1037 閱讀 4622

看到這約數和第一反應是約數和函式,然後仔細一看不是正經的約數和函式,就去推去了,然後推的有點小複雜。(數論函式那部分做多了)

然後觀察也沒有用到什麼數論部分的特殊知識啊,難不成真的要暴力?

大概分析了一下,應該要暴力1e6級別的。因為乙個數如果是合數,則至少有兩個非平凡因子,這兩個非平凡因子的和由均值不等式最小為2sqrt(n)<=1000,所以我們大概要暴力(500)2=250000.

然後我想的是直接暴力每個數字的因子,那麼大概每次因子分解都是根號級別的,那麼就是n1.5級別的,不太行。

然後我上網搜搜了題解,還是我菜了,這種打表的因子分解應該是從小往大的,所以複雜度應該是調和級數,大概是o(nlogn)級別的 ,所以1e6壓力不大。

其實可以直接打表存陣列的值,1000個也不是很多問題更簡單。

做有技巧的題多了都不會考慮暴力了。遇到問題還是應該先分析複雜度,能暴力就暴力。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int maxn=

1e6+5;

int sum[maxn]

;bool check[

1005];

intmain()

for(

int i=

1;i)int n,t;

scanf

("%d"

,&t)

;while

(t--

)return0;

}

hdu 1999 不可摸數

別人的 寫的很好先記錄一下 pragma warning disable 4996 include include include include include include using namespace std 題目只是求1000以內的不可摸數。我們可以想想乙個數的s n 大約等於多少,因為...

HDU1999不可摸數

problem description s n 是正整數n的真因子之和,即小於n且整除n的因子和.例如s 12 1 2 3 4 6 16.如果任何 數m,s m 都不等於n,則稱n為不可摸數.input 包含多組資料,首先輸入t,表示有t組資料.每組資料1行給出n 2 n 1000 是整數。outp...

hdu oj 1999 不可摸數

s n 是正整數n的真因子之和,即小於n且整除n的因子和.例如s 12 1 2 3 4 6 16.如果任何 數m,s m 都不等於n,則稱n為不可摸數.包含多組資料,首先輸入t,表示有t組資料.每組資料1行給出n 2 n 1000 是整數。如果n是不可摸數,輸出yes,否則輸出no 325 8 ye...