hdu 4342 History repeat itself

来源:互联网 发布:java实现文件加密解密 编辑:程序博客网 时间:2024/05/01 23:53

题意:求第n个非完全 平方数m,并求 求和sqrt(i)(1<=i<=m)

分析:m-sqrt(m)<=n,,,解得:m<=2*n+1+sqrt(4*n+1);当m为完全平方数时,m--

求和过程:1+sqrt(2)+sqrt(3)+sqrt(4)+sqrt(5)+sqrt(6)+sqrt(7)+sqrt(8)+sqrt(9)+sqrt(10)+......+sqrt(m),


代码:

#include<iostream>#include<cstdio>#include<math.h>using namespace std;int main(){int T;__int64 n;scanf("%d",&T);while(T--){scanf("%I64d",&n);__int64 m=(2*n+1+sqrt(4*n+1.0))/2;if(  (__int64(sqrt(m*1.0)))*(__int64(sqrt(m*1.0)))  ==m)m--;__int64 ans=0;__int64 temp=(__int64)sqrt(m*1.0);for(__int64 i=1;i<temp;i++)  //i也要用__int64,不然一直WA{           ans+=i*((i+1)*(i+1)-i*i);}for(__int64 i=temp*temp;i<=m;i++)ans+=temp;printf("%I64d %I64d\n",m,ans);}//system("pause");return 0;}