UVa 10892 - LCM Cardinality Solution

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> f;
int gcd(int a,int b){
    if(!a)
        return b;
    return gcd(b%a,a);
}
int main(){
    int n;
    while(cin>>n&&n){
        f.clear();
        int ans=0;
        for(int i=1;i<sqrt(n);i++){
            if(n%i==0)
                f.push_back(i),f.push_back(n/i);
        }
        if((int)sqrt(n)*(int)sqrt(n)==n)
            f.push_back(sqrt(n));
        for(int i=0;i<f.size()-1;i++){
            for(int j=i+1;j<f.size();j++){
                long long tmp=f[i];
                tmp/=gcd(f[i],f[j]);
                tmp*=f[j];
                if(tmp==(long long)n)
                    ans++;
            }
        }
        cout<<n<<' '<<ans+1<<endl;
    }
}

Comments