小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。
這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數送給了小x。小x很開心地收下了。
然而現在小 w 卻記不起送給小x的是哪個數了。你能幫他一下嗎?
輸入格式:
包含多組測試資料。檔案第一行有乙個整數 tt ,表示測試資料的組數。 第 22 至第 t+1t+1 行每行有乙個整數 k_iki,描述一組資料,含義如題目中所描述。
輸出格式:
含t 行,分別對每組資料作出回答。第 ii 行輸出相應的第 k_iki個不是完全平方數的正整數倍的數。
輸入樣例#1:
41 13
100
1234567
輸出樣例#1:
119 163
2030745
對於 50%的資料有 1≤ki≤105 , 對於 100%的資料有 1≤ki≤109
,t≤50
solution:
本題zyys。
題意就是求第$k$個沒有完全平方數因子的數,所謂數$x$的完全平方數因子就是$i^2|x,i\in z^+,i\neq 1$。
一眼可以想到,直接線性列舉,然後每次$\sqrt n$求約數判斷,這樣能水分,但是切不了本題。
此時,因為答案顯然單調遞增,考慮二分答案,然後判斷$[1,x]$中的滿足條件的數個數是否等於$k$。
對於$x$以內的無平方因子數=$0$個質數的平方的倍數的個數(即$1$的倍數)-$1$個質數的平方的倍數的個數(即$4,9,16…$的倍數)+$2$個質數的乘積的平方的倍數的個數(即$36,100,225…$的倍數)……
不難發現,整個式子其實就是容斥原理的體現,我們可以線篩求出莫比烏斯函式,那麼最後的答案就是$ans= \sum \limits_^}\rfloor}$。
那麼線篩只要$\sqrt\leq 40000$,然後二分邊界$l=k,r=k\times 2$就好了(顯然$k$以內最多就是每個數都是無平方因子數,而$2\times k$內的質數大約$\ln 個$,大約有$\sum\limits_^},i)}$個,貌似是大於$k$的吧!)
然後直接求就好了。
我這裡想騷操作一波,所以就對求的式子進行了數論分塊,那麼只需處理出$\mu$的字首和就好了,然後對$\lfloor}\rfloor$進行數論分塊求。
事實證明,因為$i\leq 40000$,所以優化效果並不特別明顯。(暴力和優化一樣快)
暴力時間複雜度$o(\log n\times \sqrt n)$,優化理論複雜度$o(\log n \times \sqrt)$
**:
#include#define il inline#define ll long long
#define re register
#define for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)>(b)?(b):(a))
const ll n = 40005
;int mu[n+5],prime[n+5
],cnt,t,k,m;
bool isprime[n+5
],f;
il ll gi()
using
namespace
std;
il bool
check(ll x)
return ans>=k;
}il
void
solve()
if(check(l))printf("
%lld\n
",l);
else printf("
%lld\n
",r);
}int
main()
}for(i,
1,n) mu[i]+=mu[i-1
]; t=gi();
while(t--)
return0;
}
P4318 完全平方數
想不出什麼辦法能直接算的 別跟我提分塊打表 不如二分答案吧 設 f x sum n i不是 完全平方數 顯然f x 與x正相關。再結合篩法 容斥,不難得到 f x sum mu i lfloor frac rfloor 找到那個滿足f x k的x就行了。include define int long...
P4318 完全平方數
gate 計算第 k 個不含完全平方因子的數。利用容斥原理,計算時,需要減去 2 2,3 2,5 2.加上 6 2,10 2,15 2.減去 30 2.即,ans n n 含 1 個質因子平方的數 含 2 個質因子平方的數 含 3 個質因子平方的數 可以看出,容斥係數即為 mu i 當 i 2 n ...
洛谷p4318 完全平方數
小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數...