zoukankan      html  css  js  c++  java
  • hdu4279 找规律+小想法

    题意:
         蛋疼的题意,最后是泽神给我讲的题意,题意是对于一个数来说,如果他不能整除另一个数同时他和另一个数非互质,那么另一个数就是这个数的特别数,如10 的特别数有 4 6 8三个,同时题目还定义,有奇数个特别数的数是真数,现在给你一个范围,问你有多少个数字是真数.


    思路:

        先打表,看下真实数的规律,假如当前数字是a,真实数其实就是6 到 a之间偶数的个数 + 奇数的平方数(如 9,25,49..) - 偶数的平方数(16 ,36 ,64..) 

    就是 :                      a / 2 - 2 + Sqrt(a) % 2

    因为如果Sqrt(a)是奇数奇数平方数就比偶数平方数多1,否则相等,所以直接+ Sqrt(a) % 2,还有一点就是sqrt()对于__int64会失精度,所以用二分去找sqrt();

    所以最后答案就是:

    y / 2 - 2 + Sqrt(y) % 2   -   ((x - 1) / 2 - 2 + Sqrt(x - 1) % 2 ) 

    注意 x=1 和 x = 2的情况处理下,不然会错...下面是打表代码 和 AC代码


    AC代码:

    #include<stdio.h>
    
    __int64 max_ = 3037000499;
    
    __int64 Sqrt(__int64 num)
    {
       __int64 low ,mid ,up;
       low = 1 ,up = num;
       if(up > max_) up = max_;
       __int64 mk = 0;
       while(low <= up)
       {
          mid = (low + up) / 2;
          if(mid * mid > num)
          {
             up = mid - 1;
          }
          else
          {
             low = mid + 1;
             mk = mid;
          }
       }
       return mk;
    }
          
    
    int main ()
    {
       __int64 x ,y ,t;
       scanf("%I64d" ,&t);
       while(t--)
       {
          scanf("%I64d %I64d" ,&x ,&y);   
          __int64 xx = (x-1) / 2 - 2 + Sqrt(x-1) % 2;
          __int64 yy = y / 2 - 2 + Sqrt(y) % 2; 
          
          if(x == 1 || x == 2) xx = 0;
          if(y == 1) yy = 0;    
          printf("%I64d
    " ,yy - xx);
       }
       return 0;
    }
    
    打表代码:
    
    
    #include<stdio.h>
    
    
    int main ()
    {
       int sss = 0;
       for(int i = 1 ;i <= 100 ;i ++)
       {
          int now = i ,sum = 0;
          for(int j = 2 ;j < i ;j ++)
          {
             if(i % j == 0)continue;
             for(int ii = 2 ;ii <= j ;ii ++)
             if(i % ii == 0 && j % ii == 0)
             {
                sum++;
                break;
             }
          }
          
         if(sum % 2) printf("%d " ,i);
       }
       getchar();
       getchar();
       getchar();
       return 0;
    }
       
    




  • 相关阅读:
    常用的汇编指令与技巧
    汇编调用c函数为什么要设置栈
    lp2356
    String函数的总结
    2019-5-22训练
    STL——substr
    STL 反转函数 (reverse() )
    2019-5-15训练——深搜
    高精度加法
    八皇后题解
  • 原文地址:https://www.cnblogs.com/csnd/p/12063238.html
Copyright © 2011-2022 走看看