zoukankan      html  css  js  c++  java
  • 1284 2 3 5 7的倍数

    分析:

    此题是典型的容斥原理题,一开始理解错误,写成了丑数题,反正一直超时,后来才发现;

    要求不是2,3,5,7的倍数的个数,可以先求出2,3,5,7的个数,之后通过n减去2,3,5,7的倍数的个数可求得不是2,3,5,7的倍数的个数;

    而要知道2,3,5,7的倍数的个数,只需要分别知道2的倍数个数,3的倍数个数,5的倍数个数,7的倍数的个数,之后通过容斥原理(先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理--简而言之,就是对于重叠次数只有奇数次的,我们加上,重叠次数为偶数次的,我们要减去)可得到。最后即可得到不是2 3 5 7的倍数的个数。

    下面给出AC代码:

    复制代码
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     __int64 n;
     6     while(scanf("%I64d",&n)!=EOF)
     7     {
     8         __int64 a=n/2;
     9         __int64 b=n/3;
    10         __int64 c=n/5;
    11         __int64 d=n/7;
    12         __int64 ab=n/6;
    13         __int64 ac=n/10;
    14         __int64 ad=n/14;
    15         __int64 bc=n/15;
    16         __int64 bd=n/21;
    17         __int64 cd=n/35;
    18         __int64 abc=n/30;
    19         __int64 abd=n/42;
    20         __int64 acd=n/70;
    21         __int64 bcd=n/105;
    22         __int64 abcd=n/210;
    23         __int64 ans=a+b+c+d-ab-ac-ad-bc-bd-cd+abc+abd+acd+bcd-abcd;
    24         printf("%I64d
    ",n-ans);
    25     }
    26     return 0;
    27 }
    复制代码
  • 相关阅读:
    Servlet设置Cookie无效
    IOS即时通讯XMPP搭建openfire服务器
    IOS之富文本编辑
    unittest单元测试框架总结
    杀死future处理的阻塞线程
    APP的UI设计原则
    如何降低一个程序的耦合性
    Hyperopt中文文档导读
    Hyperopt中文文档导读
    AdaBoost算法特性
  • 原文地址:https://www.cnblogs.com/yechanglv/p/6941974.html
Copyright © 2011-2022 走看看