公約数
タイトル1493:公約数
時間制限:1秒
メモリ制限:128メガ
特殊問題:いいえ
コミット:2354
解決:375
タイトルの説明:
2つの正の整数a,b(1<=a,b<=1億円)を与え、それらの公約数の個数を計算する.正の整数8,16が与えられた場合、彼らの公約数は1,2,4,8であるため、出力は4である.
入力:
入力には、複数のテストデータが含まれ、各テストデータの1行に2つの整数a,bが含まれます.
出力:
各テストデータのセットについて、出力は整数であり、aとbの公約数を表す.
サンプル入力:
サンプル出力:
時間制限:1秒
メモリ制限:128メガ
特殊問題:いいえ
コミット:2354
解決:375
タイトルの説明:
2つの正の整数a,b(1<=a,b<=1億円)を与え、それらの公約数の個数を計算する.正の整数8,16が与えられた場合、彼らの公約数は1,2,4,8であるため、出力は4である.
入力:
入力には、複数のテストデータが含まれ、各テストデータの1行に2つの整数a,bが含まれます.
出力:
各テストデータのセットについて、出力は整数であり、aとbの公約数を表す.
サンプル入力:
8 16
22 16
サンプル出力:
4
2
#include<cstdio>
#include<cmath>
using namespace std;
int max(int a,int b)
{
if(b>a){a=a+b;b=a-b;a=a-b;}
if(a%b==0)return b;
else return max(b,a%b);
}
int num(int n)
{
int i,j,count=0;
for(j=(int)sqrt(1.0*n),i=1; i<=j; ++i)
if(n%i==0)count+=2;
if(j*j==n)--count;
return count;
}
int main()
{
int a,b,c;
while(scanf("%d%d",&a,&b)!=EOF &&a &&b )
{
c=num( max(a,b) );
printf("%d
",c);
}
return 0;
}
/**************************************************************
Problem: 1493
User: 3011216016
Language: C++
Result: Accepted
Time:20 ms
Memory:1032 kb
****************************************************************/