數論初步——Eratosthenes篩法
阿新 • • 發佈:2019-01-24
無平方因子的數
給出正整數 和 ,區間內的“無平方因子”的數有多少個?
整數 無平方因子,當且僅當不存在,使得 p 是 的倍數。(1 <= n <= m <= ,m - n <= )。
分析:
首先先介紹一下用Eratosthenes篩法構造1 ~ n的素數表。
思想:
對於不超過 n 的每個非負整數 p,刪除2p,3p,4p,…..,當處理完所有的數之後,還沒有被刪除的數就是素數。
實現程式碼:
int m = sqrt(n + 0.5);
memset(vis,0 ,sizeof(vis));
for(int i = 2; i <= m; i++) if(!vis[i])
for(int j = i*i; j <= n; j+=i) vis[j] = true;
這裡給出一個有意思的問題:
給定n,c的值是多少???換句話說,不超過n的整數中,有多少的素數呢?
素數定理:()~
最後,我們如何求出區間內無平方因子的個數呢?方法和篩素數類似,對於不超過的所有素數p,篩掉區間[n,m]內的所有倍數。
實現程式碼:
int r = sqrt(m + 0.5);
memset(vis,0 ,sizeof(vis));
for(int i = n; i <= r; i++) if(!vis[i])
for(int j = i*i; j <= m; j+=i*i) vis[j] = true;