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位。??)

  • 相关阅读:
    C# 安装包中添加卸载
    如何提取json里面的数据
    JSON写入
    在Net下处理Json
    Linq To Json
    衡量视频序列特性的TI(时间信息)和SI(空间信息)
    DotCMS安装步骤
    【12c OCP】最新CUUG OCP071考试题库(52题)
    【ocp12c】最新Oracle OCP071考试题库(44题)
    【Oracle 12c】最新CUUG OCP071考试题库(53题)
  • 原文地址:https://www.cnblogs.com/cgf1993/p/3010590.html
Copyright © 2011-2022 走看看