本文主要是介绍NYOJ--993 How many integers can you find,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
How many integers can you find
- 描述
- 给你三个数,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;elsecout << (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++;
这篇关于NYOJ--993 How many integers can you find的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!