公約数

1254 ワード

タイトル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の公約数を表す.
サンプル入力:
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 ****************************************************************/