暑假选拔赛02 ---- Ysequence

来源:互联网 发布:js把date转换成字符串 编辑:程序博客网 时间:2024/05/02 15:52

Problem Description

将所有的正整数从小到大列出,然后把其中的完全平方数都去掉,就得到了著名的Yellowstar数列。它的前几项如下:
2,3,5,6,7,8,10……
给出正整数n,请你输出Yellowstar数列的第n项(2算是第1项).

Input

第一行一个正整数T,表示有T组测试数据。
接下来T行每行为一组数据。每行一个正整数n,含义如上。
n<=10^12,T<=10^5。

Output

每组数据一行,输出Yellowstar数列的第n项。

Sample Input

2
10
1048576

Sample Output

13
1049600

解题思路

第 i 和 第 i+1个完全平方数之间,间隔 2i 个数;
Y序列中 第n项前 原本应有 x 个完全平方数: 且满足 x(x+1) = n;
求根公式得 x = -1+sqrt(1+4*n)/2.0;
x 应 向上取整.
最后 ans = n+x;

参考代码

#include <stdio.h>#include <math.h>int main(){    int T;    scanf("%d",&T);    while (T--){        __int64 n,ans;        scanf("%I64d",&n);        int t = ceil((-1+sqrt(1+4*n))/2.0);        ans = n+t;        printf("%I64d\n",ans);    }    return 0;}
0 0
原创粉丝点击