關於約數
唯一分解定理:任何數都可由素因子之積構成
int p[
100]
,a[100
],cnt;
void
divide
(int n)}}
if(n>1)
for(
int i=
1;i<=cnt;i++
)cout<<<
" "<<}
方法2:離線做法,預處理出乙個質因子樹。預處理o(nlogn),查詢乙個數o(logn)
void
init()
}}void
div_it
(int x)
}}
方法1:試除法,判斷乙個數是否是素數,o(sqrt(n))
int
isprime
(int x)
return1;
}
方法2:埃篩,o(nloglogn)
const
int n=
1e7;
int prime[n+
100]
,cnt;
//素數表
int p[n+
100]
;//判斷素數
void
init()
}
方法3:尤拉篩,o(n)
const
int n=
1e7;
int prime[n+
100]
,cnt;
//素數表
int p[n+
100]
;//判斷素數
void
init()
}}
解釋:
方法1:試除法即可,o(sqrt(n))
void
solve
(int n=
100)
}}
方法2:對質因子進行排列組合,o(sqrt(n))
void
solve
(int n)}if
(n>
1)p[
++cnt]
=n,a[cnt]=1
;long
long ans=1;
for(
int i=
1;i<=cnt;i++
)ans*=
(a[i]+1
);}
方法:使用類埃篩,o(nlogn)比試除法的nsqrt(n)優
vector<
int>f[
100005];
void
solve
(int n)
}for
(int i=
1;i<=n;i++
) cout<}}
方法:使用整除分塊求∑in
[n/i
]\sum_i^n [n/i]
∑in[n
/i]
數論1 素數 約數 反素數
素數是指只能被自身整除和被1整除的數 大於1的自然數,1不是素數 不是素數的數為合數 常見的題型有 素數的判定 素數的篩選兩種題型 素數的篩選 const int n 1000001 int primes n cnt primes存素數 cnt 存素數的個數 bool st n 存數n是否被篩過 v...
數論之 素數
素數又叫質數,乙個數除了1和他本身沒有其他因子的叫素數。最一般的判斷素數寫法 bool prime int x return true 快點的n開平方的複雜度bool prime int x 這是開平方的寫法,減小了查詢範圍。return true bool prime int x 這是乘的寫法,讓...
數論之約數
目錄 題目大意 輸出n個數,分別輸出這n個數所有的約數 include include include using namespace std const int n 1e5 10 vectorsolve int n sort a.begin a.end return a int main 基於算術...