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\)時,個數\(\dfrac=0\),顯然列舉的上界為\(\sqrt n\)。
不需要整除分塊。
\[ans(n)=\sum_^\mu(i)\lfloor \frac\rfloor
\]二分答案,檢查是否有\(ans(mid) > k\)。
注意:這道題很多地方沒有給確定的範圍,所以最好一開始把陣列開的大一點,估算不出來的話就試一試...
code
#include#include#include#include#define mogeko qwq
using namespace std;
#define int long long
const int maxn = 5e4+10;
const int n = 5e4;
int t,k,ans,cnt;
int prime[maxn],mu[maxn];
bool vis[maxn];
void prime()
for(int j = 1;j <= cnt && i*prime[j] <= n;j++)
}}bool check(int x)
signed main()
else l = mid+1;
}printf("%lld\n",ans);
}return 0;
}
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 完全平方數
小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數...
洛谷p4318 完全平方數
小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數...