题目描述:
给定两个正整数a,b(1<=a,b<=100000000),计算他们公约数的个数。
如给定正整数8和16,他们的公约数有:1、2、4、8,所以输出为4。
输入:
输入包含多组测试数据,每组测试数据一行,包含两个整数a,b。
输出:
对于每组测试数据,输出为一个整数,表示a和b的公约数个数。
样例输入:
8 16
22 16
样例输出:
4
2
来源:
2013年王道论坛计算机考研机试全真模拟考试
#include<stdio.h> int swap(int &a,int &b) { int t; t=a; a=b; b=t; } int main() { int i,n,m,sum,num1,num2; while(~scanf("%d %d",&n,&m)) { if(n>m) swap(n,m); sum=0; for(i=1;i*i<=n;i++)//只按里面比较小的数对半求 { if(n%i==0) { num1=i; num2=n/i; if(num1!=num2) { if(m%num1==0&&n%num1==0) sum++; if(m%num2==0&&n%num2==0) sum++; } else { if(m%num1==0&&n%num1==0) sum++; } } } printf("%d\n",sum); } return 0; }
时间: 2025-01-31 05:40:03