您的位置:首页 > 其它

NYOJ--993 How many integers can you find

2014-06-28 08:26 369 查看

How many integers can you find

时间限制:1000 ms | 内存限制:65535 KB
难度:1
描述 给你三个数,n,m1,m2,找出所有小于n的能被m1或m2整除的数的个数。
输入输入包含多组测试数据,每组数据占一行。

0<n<2^31,0<m1,m2<=10。输出每组数据输出占一行。样例输入
12 2 3

样例输出
7

来源爱生活

#include <iostream>
using std::endl;
using std::cout;
using std::cin;
//欧几里得求最大公约数
int gcd(int a, int b)
{
    if (a % b == 0)
    {
        return b;
    }
    else
    {
        return gcd(b, a % b);
    }
}
int main()
{
    int n,m1, m2;
    while (cin >> n >> m1 >> m2)
    {
        if (m1 != m2)
            cout << (n-1)/m1+(n-1)/m2-(n-1)/((m1*m2)/gcd(m1,m2))<< endl;
        else
            cout << (n-1)/m1 << endl;
    }
    return 0;
}


暴力循环的话就一定会超时,

/* 能被m1整除的个数 + 能被m2整除的个数 - 能同时被m1和m2整除的个数 */

s = n / m1 + n / m2 - n / lcm(m1, m2);

if (n % m1 == 0) s--;

if (n % m2 == 0) s--;

if (n % lcm(m1, m2) == 0) s++;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: