"求满足最大公约数和最小公倍数条件的正整数对的个数 - C++17 实现"\n\n本程序使用 C++17 语言实现,用于求解满足最大公约数和最小公倍数条件的正整数对的个数。输入两个正整数 x 和 y,程序将计算出以 x 为最大公约数,以 y 为最小公倍数的所有可能的正整数对 (P, Q) 的个数。\n\n输入格式\n一行两个正整数 x,y。\n\n输出格式\n一行一个数,表示求出满足条件的 两个正整数P,Q的个数。\n\n样例\n样例输入 #1\n3 60\n样例输出 #1\n4\n\nC++17 实现内容\n\nc++\n#include <iostream>\n#include <cmath>\nusing namespace std;\n\n// 求最大公约数\nint gcd(int a, int b) {\n if (b == 0)\n return a;\n else\n return gcd(b, a % b);\n}\n\n// 求最小公倍数\nint lcm(int a, int b) {\n return a * b / gcd(a, b);\n}\n\nint main() {\n int x, y;\n cin >> x >> y;\n \n int count = 0;\n int limit = sqrt(y);\n \n for (int i = 1; i <= limit; i++) {\n if (y % i == 0) {\n int p = x * i;\n int q = y / i;\n \n if (gcd(p, q) == x && lcm(p, q) == y)\n count++;\n \n if (i * i != y) {\n p = x * (y / i);\n q = i;\n \n if (gcd(p, q) == x && lcm(p, q) == y)\n count++;\n }\n }\n }\n \n cout << count << endl;\n \n return 0;\n}\n\n\n代码说明\n\n1. 函数 gcd(a, b) 用于计算两个整数 a 和 b 的最大公约数。\n2. 函数 lcm(a, b) 用于计算两个整数 a 和 b 的最小公倍数。\n3. 主函数 main() 中,首先读取输入的两个正整数 x 和 y。\n4. 使用循环遍历 y 的所有因子 i,并计算出相应的 p 和 q。\n5. 检查 p 和 q 是否满足最大公约数为 x,最小公倍数为 y 的条件。\n6. 满足条件的 p 和 q 对的个数存储在变量 count 中。\n7. 最后输出 count 的值,即满足条件的正整数对的个数。\n\n程序优化\n\n该程序使用了 sqrt(y) 作为循环上限,这可以有效地减少循环次数,提高程序效率。\n\n总结\n\n该程序使用 C++17 语言实现了求解满足最大公约数和最小公倍数条件的正整数对的个数的功能,并使用了 sqrt(y) 作为循环上限进行优化。\n\n希望该程序能够帮助您更好地理解和解决相关问题。

求满足最大公约数和最小公倍数条件的正整数对的个数 - C++17 实现

原文地址: http://www.cveoy.top/t/topic/ppm8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录