HDU 4279 Number [数学?]

  网赛第一个看的就是这题,直接打表找规律。很容易发现是由大于4的的偶数以及奇数的平方,再除去偶数的平方所组成。一开始犯了个比较2的错误,要不然应该是FB了。。

  也没有去推为什么是这样,这种题目一般都是先打表找下规律,一发现规律就懒的去推了。。

  直接sqrt是有精度问题的,但是G++能A,C++是WA,比较简单的办法是sqrt后再通过乘法调整一下。

  

 1 #include <string.h>
 2 #include <stdio.h>
 3 #include <math.h>
 4 typedef long long LL;
 5 int cas;
 6 LL l,r;
 7 LL get(LL x){
 8     if(x<=5)return 0;
 9     LL xx=sqrt((double)x);
10     //有精度问题,调整一下(没有这句G++AC,C++WA..)
11     while(xx*xx<=x)xx++;xx--;
12     return x/2+(xx+1)/2-xx/2-2;
13 }
14 int main(){
15     scanf("%d",&cas);
16     while(cas--){
17         scanf("%I64d%I64d",&l,&r);
18         printf("%I64d\n",get(r)-get(l-1));
19     }
20     return 0;
21 }
原文地址:https://www.cnblogs.com/swm8023/p/2684211.html