2014年王道论坛研究生机试练习赛(二):题目1493:公约数
2014-03-03 21:28
239 查看
题目描述:
给定两个正整数a,b(1<=a,b<=100000000),计算他们公约数的个数。
如给定正整数8和16,他们的公约数有:1、2、4、8,所以输出为4。
输入:
输入包含多组测试数据,每组测试数据一行,包含两个整数a,b。
输出:
对于每组测试数据,输出为一个整数,表示a和b的公约数个数。
样例输入:
样例输出:
Hint:
本题要利用一个定理:公约数是最大公约数的约数。先求出两个数字的最大公约数,然后用开根号算法求出公约数的个数。
代码如下:
给定两个正整数a,b(1<=a,b<=100000000),计算他们公约数的个数。
如给定正整数8和16,他们的公约数有:1、2、4、8,所以输出为4。
输入:
输入包含多组测试数据,每组测试数据一行,包含两个整数a,b。
输出:
对于每组测试数据,输出为一个整数,表示a和b的公约数个数。
样例输入:
8 16 22 16
样例输出:
4 2
Hint:
本题要利用一个定理:公约数是最大公约数的约数。先求出两个数字的最大公约数,然后用开根号算法求出公约数的个数。
代码如下:
#include <iostream> #include<vector> #include<algorithm> #include<functional> #include<iterator> #include<cstdio> using namespace std; int gcd(int a, int b); int main() { #ifdef ONLINE_JUDGE #else freopen("D:\\in.txt", "r", stdin); freopen("D:\\out.txt","w",stdout); #endif int a(0), b(0); int count(0), max(0), i(0); while (cin>>a>>b) { max = gcd(a,b); count = 0; for (i = 1; i*i < max; i++) { if (max%i == 0) count += 2; } if (i*i == max) count++; printf("%d\n", count); } return 0; } int gcd(int a, int b) { while (b != 0) { int t = a%b; a = b; b = t; } return a; }
相关文章推荐
- 修改jsp导致tomcat访问该页面报错
- UVa 10465 - Homer Simpson DP 完全背包
- theano初步
- 【prim】poj 2485
- HDU-2036-JAVA-多边形面积
- 编译sqoop
- 物联网学习笔记——构建RESTFul平台2
- 第一次接触c语言
- 程序、进程和线程
- poj 2240-Arbitrage Bellman-ford算法
- 最大公约数
- C++中const详解
- 挑7
- OpenSuse下编译MonoDevelop
- hadoop(适合大数据的分布式存储和分布式计算平台)---总结
- 事件处理概述
- NSArray中的对象进行排序
- 三、Cocos2dx之重要概念及Test例子
- 【转】iOS SDK: 使用NSUserDefaults
- 正三角形的外接圆面积