http://acm.hdu.edu.cn/showproblem.php?pid=4342
题意:
求出第n个非平方数,并根据公式求出结果。
思路:
简单题。先求出第n个非平方数是多少,再代入公式计算。计算我是用i*(i+1)^2-i^2)再求和算的,纸上画画,很容易得出这个结论。
我的代码:
#include<stdio.h>
#include<math.h>
__int64 x[100001],i,j,n,t,T;
__int64 formula(__int64 m)
{
__int64 ans=0,i,j,n;
n=(__int64)sqrt(m*1.0);
for(i=1;i<n;i++)
ans+=(x[i+1]-x[i])*i;
ans+=(m-x[i]+1)*i;
return ans;
}
int main()
{
for(i=0;i<100000;i++) x[i]=i*i;
scanf("%I64d",&T);
while(T--)
{
scanf("%I64d",&n);
t=(__int64)sqrt(n*1.0);
n+=t;//看n前面有多少个平方数
if(n>=x[t+1]) n++;//超过了t+1个平方数
printf("%I64d %I64d\n",n,formula(n));
}
return 0;
}