2016-06-12 110 views
1

爲什麼我在這個問題上超出了時間限制?鏈接:http://www.spoj.com/problems/ENIGMATH/Spoj:ENIGMATH - 玩數學遊戲

lcm很容易用兩個數字的gcd幫助計算出來。用於計算gcd歐幾里得算法。

#include<iostream> 
using namespace std; 
long long int gcd(long long int a,long long int b) 
{ 
    if(b==0) 
    return a; 

    else 
    return gcd(b,a%b); 
} 
int main() 
{ 
    long long int t,a,b,lcm,i=0; 
    cin>>t; 

    while(i<t) 
    { 
     cin>>a>>b; 
     if(a==b) 
     cout<<"1 1\n"; 

     else 
     { 
      lcm=(a*b)/gcd(a,b); 
      cout<<lcm/a<<" "<<lcm/b<<"\n"; 
     } 
} 
return 0; 
} 

回答

2

你是不是在循環更新i,所以除非你輸入負值或者零t會失敗陷入死循環。

嘗試通過更改i<ti++<t或其他您喜歡的方式進行更新。

0

您可以嘗試這種方式...謝謝。

#include<iostream> 
using namespace std; 
long long int gcd(long long int a,long long int b) 
{ 
    if(b==0) 
    return a; 

    else 
    return gcd(b,a%b); 
} 
int main() 
{ 
    long long int t,a,b,lcm,i=0; 
    cin>>t; 

    while(i<t) 
    { 
     cin>>a>>b; 
     if(a==b) 
     cout<<"1 1\n"; 

     else 
     { 
      lcm=(a*b)/gcd(a,b); 
      cout<<lcm/a<<" "<<lcm/b<<"\n"; 
     } 
    i += 1;//Here was mistook. 
} 
return 0; 
}