別人的**寫的很好先記錄一下
#pragma warning(disable:4996)
#include #include #include #include #include #include using namespace std;
/*題目只是求1000以內的不可摸數。
我們可以想想乙個數的s(n)大約等於多少,因為s(素數)=1,所以我們不需要考慮素數。
如果乙個數n是乙個素數m的平方,那麼其s(n)會是最小的,s(n)=m+1
1000內最大的素數是997,其平方是994009,也就說s(994009)=997+1=998
這個994009就是我們需要打表的最大範圍(我近似看成100w),
也就是說如果乙個數大於100w,那個s(n)必定大於1000,我們不需要考慮。
*/int a[1100000],has[1001];
void init()
} for(i=1;i<=1000000;i++) }
int main()
return 0;
}
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...
HDU1999不可摸數 暴力打表
看到這約數和第一反應是約數和函式,然後仔細一看不是正經的約數和函式,就去推去了,然後推的有點小複雜。數論函式那部分做多了 然後觀察也沒有用到什麼數論部分的特殊知識啊,難不成真的要暴力?大概分析了一下,應該要暴力1e6級別的。因為乙個數如果是合數,則至少有兩個非平凡因子,這兩個非平凡因子的和由均值不等...
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...