zoukankan      html  css  js  c++  java
  • P4318 完全平方数

    题目描述

    (X)自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而这丝毫不影响他对其他数的热爱。

    这天是小(X)的生日,小(W)想送一个数给他作为生日礼物。当然他不能送一个小(X)讨厌的数。他列出了所有小(X)不讨厌的数,然后选取了第(K)个数送给了小(X)。小(X)很开心地收下了。

    然而现在小(W)却记不起送给小(X)的是哪个数了。你能帮他一下吗?

    题解

    在SP4168 SQFREE - Square-free integers的基础上加上二分即可,判断(1)(mid)是否有(K)个无平方因子的数,以此改变左右边界即可。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #define ll long long
    using namespace std;
    const int N = 1e6;
    int T, K, tot, prime[N + 5], mu[N + 5], s1[N + 5], s2[N + 5], vis[N + 5];
    inline int read()
    {
    	int x = 0, f = 1; char ch = getchar();
    	while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
    	while(ch >= '0' && ch <= '9') {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();}
    	return x * f;
    }
    void init(int n)
    {
    	mu[1] = 1;
    	for(int i = 2; i <= n; i ++)
    	{
    		if(!vis[i]) {prime[++ tot] = i; mu[i] = -1;}
    		for(int j = 1; j <= tot && prime[j] * i <= n; j ++)
    		{
    			vis[i * prime[j]] = 1;
    			if(i % prime[j] == 0) break;
    			mu[i * prime[j]] = - mu[i];
    		}
    	}
    	for(int i = 1; i <= n; i ++) s1[i] = s1[i - 1] + mu[i], s2[i] = s2[i - 1] + mu[i] * mu[i];
    }
    ll calc(ll n)
    {
    	if(n <= N) return s2[n];
    	ll res = 0, m = sqrt(n);
    	for(ll l = 1, r; l <= m; l = r + 1)
    	{
    		r = min((ll)sqrt(n / (n / (l * l))), m);
    		res += (n / (l * l)) * (s1[r] - s1[l - 1]);
    	}
    	return res;
    }
    void work()
    {
    	T = read(); init(1e6);
    	while(T -- > 0)
    	{
    		K = read(); ll l = 0, ans = 0, r = 2ll * K;
    		while(l <= r)
    		{
    			ll mid = (l + r) >> 1;
    			if(calc(mid) >= K) ans = mid, r = mid - 1;//
    			else l = mid + 1;
    		}
    		printf("%lld
    ", ans);
    	}
    }
    int main() {return work(), 0;}
    
  • 相关阅读:
    javascript入门笔记8-window对象
    javascript入门笔记7-计时器
    一篇RxJava友好的文章(二)
    Android 最新学习资料收集
    一篇RxJava友好的文章(一)
    瓣呀,一个基于豆瓣api仿网易云音乐的开源项目
    UStore-自定义JDF文件格式输出
    UStore-添加自定义工作流(JDF)到产品
    XMPie部署与创建过程
    XMPie Tracking 操作
  • 原文地址:https://www.cnblogs.com/Sunny-r/p/12611157.html
Copyright © 2011-2022 走看看