zoukankan      html  css  js  c++  java
  • HD4279+(int long等的表示范围......)

    一类思路,打表找规律题....

    或者先来稍加论证....

    欧拉函数在n>2时,值都为偶数

    题意: 给出一个f(x), 表示不大于x的正整数里,不整除x 且 跟x有大于1的公约数 的数的个数。定义F(x), 为不大于x的正整数里,满足f(x)的值为奇数的数的个数。题目就是求这个F。

    分析:

    打表找规律的方法我就不说了。这里我们来简单推理证明下。

    先来看f(x),“不整除x” 等同于 不是x的约数,“跟x有大于1的公约数” 等同于 不是x的互质数。而且从F的定义知道,我们只需要考虑f(x)的奇偶性即可。

    所以, f(x) = x - 约数个数 - 互质数个数 +1 。最后+1是因为,1是约束也是互质数,减了两次所以补回来。

    约数个数,我们由基本定理可得,x可写成质数幂累乘的形式,而由计数方法易知 x的约数个数为 (质数的幂+1)的累乘。所以若要使约数为奇数,充要条件是(质数的幂+1)都为奇数,即质数的幂都为偶数。所以此时 x必然是一个平方数。综上,x为平方数,其约数个数为奇数;x为非平方数,其约数个数为偶数

    互质数个数,我们自然联想到欧拉函数。

    欧拉函数的值为 不大于n的正整数中与n互质的数的个数。这不就是互质数个数么?而且可以证明,欧拉函数在n>2时,值都为偶数。

    所以,当x>2时, 若x为平方数,f(x)=x-奇-偶+1,要使f(x)为奇数,则x必为奇数;若x为非平方数,f(x)=x-偶-偶+1,要使f(x)为奇数,则x必为偶数。 当x=1或2时,f(x)=0.

    综上,F(x)的值为[3,x]中,奇数平方数+偶数非平方数的个数和,即 偶数个数-偶数^2的个数+奇数^2的个数

    而偶数个数为 x/2-1,-1是为了把2减掉。偶数^2个数为 sqrt(x)/2,奇数^2个数为 ( sqrt(x)-(sqrt(x)/2) )-1,这里-1是为了把1减掉。

    所以,化简后,F(x) = x/2-1+(sqrt(x)%2? 0: -1).

    至此推证完毕。

    另外,这题不管我怎么改,用C++交始终是wa(无力吐槽杭电的int64)。。不知道为什么,如果有人有C++能AC的代码,麻烦提供一下,非常感谢~

    还有一点就是,x要转成long double后再开根号,或者直接 x*1.0 。用double会wa。。

     找到这个规律直接遍历也肯定还会超时哪~~~~~~~~

    这真是有意思呃@@

    附:

    2^64 = 1.844674407371 * 10 19

    unsigned   int   0~4294967295  

    int   -2147483648~2147483647

    unsigned long 0~4294967295

    long   -2147483648~2147483647

    long long的最大值:9223372036854775807

    long long的最小值:-9223372036854775808

    unsigned long long的最大值:1844674407370955161

    __int64的最大值:9223372036854775807

    __int64的最小值:-9223372036854775808

    unsigned __int64的最大值:18446744073709551615

     

    (float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
      double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。??)

  • 相关阅读:
    POJ 1141 括号匹配 DP
    881. Boats to Save People
    870. Advantage Shuffle
    874. Walking Robot Simulation
    文件操作
    861. Score After Flipping Matrix
    860. Lemonade Change
    842. Split Array into Fibonacci Sequence
    765. Couples Holding Hands
    763. Partition Labels
  • 原文地址:https://www.cnblogs.com/cgf1993/p/3010590.html
Copyright © 2011-2022 走看看