給出正整數n,m,區間[n,m]內的無平方因子數有多少個?
整數p無平方因子,當且僅當不存在k>1,使p是k^2的倍數,1<=n<=m<=10^12,m-n<=10^7
兩個整數n,m
[n,m]間的無平方因子數的個數
1 5
4在此鍵入。
劉汝佳《入門經典》
題意 : 對於所給區間,詢問沒有平方因子的數有多少個?
思路分析 : 這個題的思想類似區間素數篩,首先將 2 到 sqrt(m)的素數全部找到,然後將所求區間內是素數平方倍數的數全部去掉,用乙個陣列去儲存,很關鍵的一點是 區間的長度時不超過 1e7 的,因此只需要開乙個這樣長度的陣列即可,計算的時候離散即可。
素數定理 : cnt(x) 約等於 x/(lnx) 。
**示例 :
#define ll long longconst int maxn = 1e6+5;
const int mm = 1e7+5;
const int mod = 1e9+7;
const double eps = 1e-9;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
ll n, m;
bool pt[maxn];
bool f[mm];
void init()}}
//pt[1] = false;
}int main() }}
int cnt = 0;
for(ll i = 0; i <= m-n; i++) if (f[i]) cnt++;
printf("%d\n", cnt);
return 0;
}
UESTC618 無完全平方因子數
題意 給定乙個 n 求區間 1,n 中的無平方因子數的個數。比如說20就是乙個有平方因子數,因為 20 2 2 times 5 思路 對於乙個數,根據算術基本定理,一定可以拆成若干個整數相乘的形式,記為 x p 1 p n 的形式。那麼答案就是莫比烏斯函式的平方和。s n sum n mu 2 i ...
CD無平方數
思路 就是會有重複的地方,把重複的地方找出來,相加或相減 includeusing namespace std define n 1010010 long long p n long long n long long ans int num 0 void dfs long long s,int j,...
尋找區間內第k小的數
這是最直接暴力的方法,時間複雜度為 o nlog n 直接排序,輸出第k小的值即可 include include using namespace std const int n 1e5 10 int n,k int a n int main 時間複雜度的計算主要關注左右兩個指標的移動,總次數為 n...