国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BZOJ 2440: [中山市選2011]完全平方數

2019-11-08 01:42:02
字體:
來源:轉載
供稿:網友

Description

小 X 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些 數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而 這絲毫不影響他對其他數的熱愛。 這天是小X的生日,小 W 想送一個數給他作為生日禮物。當然他不能送一 個小X討厭的數。他列出了所有小X不討厭的數,然后選取了第 K個數送給了 小X。小X很開心地收下了。 然而現在小 W 卻記不起送給小X的是哪個數了。你能幫他一下嗎?

Input

包含多組測試數據。文件第一行有一個整數 T,表示測試 數據的組數。 第2 至第T+1 行每行有一個整數Ki,描述一組數據,含義如題目中所描述。

Output

含T 行,分別對每組數據作出回答。第 i 行輸出相應的 第Ki 個不是完全平方數的正整數倍的數。

Sample Input

4

1

13

100

1234567

Sample Output

1

19

163

2030745

HINT

對于 100%的數據有 1 ≤ Ki ≤ 10^9, T ≤ 50

分析

二分+判定

小于x的可以正確分解的數字個數是 Σmu[i]*(x/i^2)

然后可以稍微把mu函數改改即可。。。

二分的上界可以測一下。。。

代碼

#include <bits/stdc++.h>#define N 50005#define ll long long#define INF 1644934081using namespace std;int mu[N];int PRime[N];bool notPrime[N];ll ans,k;int tot;void getMu(){ mu[1] = 1; for (int i = 2; i <= N; i++) { if (!notPrime[i]) { prime[++tot] = i; mu[i] = -1; } for (int j = 1; j <= tot && i * prime[j] <= N; j++) { notPrime[i * prime[j]] = 1; if (i % prime[j] == 0) { mu[i * prime[j]] = 0; break; } mu[prime[j] * i] = -mu[i]; } }}ll getPos(int x){ ll sum = 0; int cnt = sqrt(x); for (int i = 1; i <= cnt; i++) { sum += x / (i * i) * mu[i]; } return sum;}int main(){ int T; scanf("%d",&T); getMu(); while (T--) { scanf("%lld",&k); ll l = k; ll r = INF; while (l <= r) { ll mid = (l + r) >> 1; if (getPos(mid) >= k) { r = mid - 1; ans = mid; } else l = mid + 1; } printf("%lld/n",ans); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 故城县| 松潘县| 万安县| 东阳市| 师宗县| 谷城县| 雷山县| 陵川县| 东丽区| 张家界市| 万源市| 太原市| 保德县| 江永县| 巧家县| 皋兰县| 山阴县| 文成县| 洞头县| 天峻县| 琼结县| 高台县| 深水埗区| 城固县| 阆中市| 枣庄市| 上蔡县| 上犹县| 开江县| 吴忠市| 海安县| 贵州省| 运城市| 镇平县| 阆中市| 上饶县| 泗洪县| 龙海市| 海淀区| 堆龙德庆县| 西宁市|