HDU 4279 Number 坑爹的迷之精度
2015-07-20 19:02
288 查看
题目描述
首先定义"special number": 如果对于一个数字B,存在一个数字A(0<A<=B),并同时满足 B%A=0 和 gcd(A,B) != 1 ,那么我们就说A是B的"special number"。 再定义一个函数f(x)表示x的"special number"的数量。并且如果f(x)%2=1时,我们就称x为"real number"。 现在给你两个数字x和y且1<=x<=y<=2^63-1,求再[x,y]区间内"real number"的数量。
分析:
看到范围后,这题第一眼就打表有木有,然后自己拿着数据去YY.......,然后就搞定。 然而就是挂掉了。最后发现竟然在开方这里。 赛后试了下,如果这样: ans = sqrt(n) 就过不了 如果改成:ans = sqrt((long double)n) 就过了 然后本人手贱又尝试了一下这个:ans = sqrt((double)n) 还是过不了 难道long double 和 double 不是一个东西 ? unsigned long long 开方竟然会有精度损失 ? 迷也......
代码如下:
@Frosero #include <iostream> #include <cstdio> #include <cmath> #define INF 0x3f3f3f3f using namespace std; int T; unsigned long long p,a,b,x,y; unsigned long long how(unsigned long long n){ unsigned long long ans,tmp; if(n < 6) return 0; ans = n / 2 - 2; tmp = sqrt((long double)n); if(tmp & 1) ans++; return ans; } int main(){ scanf("%d",&T); while(T--){ cin>>a>>b; y = how(b); x = how(a-1); cout<<y - x<<endl; } return 0; }
相关文章推荐
- 动易2006序列号破解算法公布
- C#实现按照指定长度在数字前补0方法小结
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中数字for循环实例
- C#实现将千分位字符串转换成数字的方法
- 阿拉伯数字转大写中文_财务常用sql存储过程
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C# 正则判断一个数字的格式是否有逗号的代码
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- C#实现的算24点游戏算法实例分析
- SQL字符串以及数字常用操作汇总
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法