1. 程式人生 > >Codeforces Round #518 (Div. 2) B LCM

Codeforces Round #518 (Div. 2) B LCM

題目

題意:

a的取值範圍為1到10的18次方,b的取值範圍為1到10的10次方,給出b的值,求lcm(a,b)/a有多少個不同的值。

思路:

lcm(a,b)/b-->a*b/(gcd(a,b)*a)-->b/gcd(a,b);因為a可以取到10的18次方,所以只要求出1到b能被b整除的數的個數就好了。比如b的一個因子為3,a可以取3000,333333,30000000000都行,只要是3的倍數,所以b中的因子肯定能被全部取到。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll b;
    cin>>b;
    ll ans=0;
    for(ll i=1;i*i<=b;i++)
    {
        if(i*i==b) 
        {
           ans+=1;
           break;
        }
        if(b%i==0) ans+=2;

    }
    cout<<ans<<endl;
    return 0;
}