您的位置:首页 > 其它

【数学思维】CodeForces - 233B Non-square Equation

2017-06-15 09:37 537 查看
Problem Desciption

x2 + s(x)·x - n = 0核心这个公式,让你找出最小的根,满足这个公式,其中s(x)表示的是x的各位数的和。

代码:这题想了很久,一开始正常思维,TLE就开始各种优化,思路就朝着缩小x的范围优化。然而就差一点就对了。后面还是在时间内没A出来,看了下人家的博客,发现和自己思路很接近。还是有点收获的。

#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
int i;
while(~scanf("%lld", &n))
{
for(i = 1; i <= 81; i++)
//因为n最大1e18,所以x最大也就1e9.所以s(x)最大也就81
{
double t = sqrt(i * i + 4 * n);
//判断求根公式结果是不是整数
long long t1 = t;
if(t1 == t)
//是整数
{
long long x = (sqrt(i * i + 4 * n) - i) / 2;
//求根公式求出x
long long tt = x, sum = 0;
while(tt)
{
sum += tt % 10;
tt = tt / 10;
}
if(sum == i)
//看看s(x) 是否等于 i 等于输出答案
{
printf("%lld\n", x);
break;
}
}
}
if(i > 81) printf("-1\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces 数学