2018年全国多校算法寒假训练营练习比赛(第三场)G大水题

链接: https://www.nowcoder.net/acm/contest/75/G
来源:牛客网

题目描述

给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。

输入描述:

本题有多组输入
每行一个数n,1<=n<=10^18.

输出描述:

每行输出输出不是2 5 11 13的倍数的数共有多少。
思路解析:
这题想明白了,其实真的挺水的,每逢2个数就有一个能被2整除,每逢5个数就有一个能被5整除,每逢11个数就有一个能被11整除,每逢13个数就有一个能被13整除。
求出能被2、5、11、13整除的数分别有多少(其实就是用n除一下,向下取整),然后用n一减就行了。(注意,每个数只能算一次,因此还要加上多算的那些能同时被2个或多个数整除的数,也即是要减去这些数的公倍数)
代码示例:
#include
using namespace std;
int main()
{
        long long int n,t,d;
        while(cin>>n)
        {
            t=0;
            t+=n/2;//能被2整除的数有多少
            t+=n/5;//能被5整除的数有多少
            t+=n/11;
            t+=n/13;
            t-=n/2/5;//能同时被2和5整除的数有多少(一个数只能算一次,因此要减去)
            t-=n/2/11;
            t-=n/2/13;
            t-=n/5/11;
            t-=n/5/13;
            t-=n/11/13;
            t+=n/2/5/11;//能同时被(2和5以及13整除的数有多少
            t+=n/2/5/13;
            t+=n/2/11/13;
            t+=n/5/11/13;
            t-=n/2/5/11/13;
            cout< 
   

你可能感兴趣的:(算法练习)