CodeChef - SQRGOOD:Simplify the Square Root (求第N个含平方因子数)
Tiny Wong the chef used to be a mathematics teacher in a senior high school. At that time, he always used to tell his students that when there is a square root of some number in one’s final result, it should be simplified by factoring out the largest square divisor of this number. For example, √ 12 = 2 √ 3 . Therefore, if an integer n has a square divisor, i.e. there is a number d > 1 such that d2 divides n, then the square root of n needs to be simplified.
Tiny himself should generate for homework some number whose square root needs simplifying. Since he used to major in Computer Science, he prefers random numbers. Therefore, he randomly chose a number n and decided to use the n-th smallest number whose square root needs simplifying in today’s homework.
Since the n-th such number is too large for him to deal with, Tiny Wong is lost in thought. Would you please help him?
Input
The first and only line of the input contains a single integer n.
Note: the number n is not fixed for each test case. Instead, it will be generated dynamically, so it may be different for each run of your program. For each test case, n is generated in the following way: we have two fixed numbers L and R; n will be chosen uniformly at random from all integers between L and R inclusive.
Note 2: Due to dynamically generated test cases, the problem is technically configured as interactive, thus reading until EOF will not work. Attempting to use any input method that expects EOF at the end will result in TLE verdict.
Output
Print a single line containing one integer — the n-th number whose square root needs simplifying.
Constraints
- 1 ≤
n
- ≤ 10
18
Subtasks
Subtask #1 (6 points): 1 ≤ n ≤ 107
Subtask #2 (17 points): 1 ≤ n ≤ 1014
Subtask #3 (27 points): 1 ≤ n ≤ 1016
Subtask #4 (50 points): 1 ≤ n ≤ 1018
Example
Input: 4 Output: 12
Explanation
The first 4 numbers whose square roots need simplifying are 4, 8, 9 and 12.
思路:见:https://blog.csdn.net/gjghfd/article/details/79137620 。
//求第N个含平方因子数时,可以把二分范围限制到如此,而筛不含平方因子数的时候,可以把上界限制到2N。
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const double pi=acos(-1.0);
map<int,int>M;
int mu[maxn],mu2[maxn],p[maxn>>],cnt; bool vis[maxn];
void init()
{
mu[]=; mu2[]=;
rep(i,,maxn-){
if(!vis[i]) p[++cnt]=i,mu[i]=-;
for(int j=,t;j<=cnt&&(t=p[j]*i)<maxn;j++){
mu[t]=-mu[i]; vis[t]=; //少做几次乘法
if(!(i%p[j])) {mu[t]=; break;}
}
}
rep(i,,maxn-) mu2[i]=mu2[i-]+(!mu[i]?:),mu[i]+=mu[i-];
}
int musum(int x)//莫比乌斯前缀和
{
if(x<maxn) return mu[x];
if(M.count(x))return M[x];
int res=;
for(int i=,j;i<=x;i=j+){
int k=x/i; j=x/k;
res-=musum(k)*(j-i+);
}
return M[x]=res;
}
ll nonfsum(ll x) //无平方因子前缀和
{
if(x<maxn) return mu2[x];
ll i=,res=,lst=,R,t;
for(;i*i*i<=x;i++) res+=(x/(i*i))*(mu[i]-lst),lst=mu[i];
for(res-=(t=x/(i*i))*lst;t;t--) res+=musum(sqrt(x/t));
return res;
}
int main(){
init();
ll N,ans,l,r,Mid;
scanf("%lld",&N);
l=N/(-/pi/pi),r=l+,l-=; //大致范围
l=max(l,1LL);
while(l<=r){
Mid=l+r>>;
if(Mid-nonfsum(Mid)>=N) ans=Mid,r=Mid-;
else l=Mid+;
}
printf("%lld\n",ans);
return ;
}
CodeChef - SQRGOOD:Simplify the Square Root (求第N个含平方因子数)的更多相关文章
- Project Euler 80:Square root digital expansion 平方根数字展开
Square root digital expansion It is well known that if the square root of a natural number is not an ...
- Project Euler 57: Square root convergents
五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...
- Codeforces 715A. Plus and Square Root[数学构造]
A. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Codeforces 612E - Square Root of Permutation
E. Square Root of Permutation A permutation of length n is an array containing each integer from 1 t ...
- Codeforces 715A & 716C Plus and Square Root【数学规律】 (Codeforces Round #372 (Div. 2))
C. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- (Problem 57)Square root convergents
It is possible to show that the square root of two can be expressed as an infinite continued fractio ...
- Square Root
Square RootWhen the square root functional configuration is selected, a simplified CORDIC algorithm ...
- Codeforces Round #372 (Div. 1) A. Plus and Square Root 数学题
A. Plus and Square Root 题目连接: http://codeforces.com/contest/715/problem/A Description ZS the Coder i ...
- Plus and Square Root
ZS the Coder is playing a game. There is a number displayed on the screen and there are two buttons, ...
随机推荐
- request doesn't contain a multipart/form-data or multipart/mixed stream ……
有文件控件"file"的表单,在提交的时候,直接使用了ajax提交,结果报了一堆错,原来这个东东要提交表单,还要用post方式,最后更改为: $("#saveForm&q ...
- bash脚本之读取数据
题目: 一个tab间隔的文件,读取时一行为一个循环,依次读取每行的参数. 比如第一行为:a b c ,输出为a+b+c #/bin/bash while read id do a=($id) b=${ ...
- HDU 3449 Consumer
这是一道依赖背包问题.背包问题通常的解法都是由0/1背包拓展过来的,这道也不例外.我最初想到的做法是,由于有依赖关系,先对附件做个DP,得到1-w的附件背包结果f[i]表示i花费得到的最大收益,然后把 ...
- redis 数据导入导出,实例内db迁移
源实例db0迁移至目标实例db1 [root@172.20.0.1 ~]# cat redis_mv.sh #!/bin/bash redis-cli -h -a password -n keys & ...
- 让FireFox支持 window.event 全局事件对象
这里比原文稍加改进,让FF也支持 event.srcElement了, 省得每次写兼容代码挺麻烦的: //For firefox window.event if(typeof(window.event ...
- centos7下安装jdk7
CentOS7.1 JDK安装 1.卸载自带OPENJDK 用 java -version 命令查看当前jdk版本信息 #java -version 用rpm -qa | grep ...
- mongodb的使用(入门)
1.登录mongodb ./bin/mongo 2.查看所有数据库 show dbs ##默认有admin 和 local两个库 3.创建数据库 use test #创建数据库后,如果不写入数据 ...
- window7 共享wifi(不通过wifi软件)
1.新建共享网络账号 管理员登录cmd输入:netsh wlan set hostednetwork mode=allow ssid=4Gtest key=12345678 ssid是无线网络名称.k ...
- Oracle给不同组数据添加顺序
SELECT DENSE_RANK() OVER(ORDER BY TABLESPACE_NAME),T.* FROM USER_TABLES T;
- HBase-修改表结构
HBase修改表结构 package com.hbase.HBaseAdmin; import java.io.IOException; import org.apache.hadoop.conf.C ...