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;}
    
  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/Sunny-r/p/12611157.html
Copyright © 2011-2022 走看看