看到這約數和第一反應是約數和函式,然後仔細一看不是正經的約數和函式,就去推去了,然後推的有點小複雜。(數論函式那部分做多了)
然後觀察也沒有用到什麼數論部分的特殊知識啊,難不成真的要暴力?
大概分析了一下,應該要暴力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...