链接:
https://codeforces.com/problemset/problem/1068/B
题意
输入一个b,求[a,b]/a有多少种值,[a,b]为a,b最小公倍数,a范围为1~1e18,1 <= b <= 1e10 。
Example
input
1
output
1
input
2
output
2
解析
假设a和b最小公倍数为t,最大公约数为w,则有公式:a * b = t * w(会用就行);题目相当于是问t / a 有多少种,由公式变换得到t / a = b / w;即等于问b / w有多少种,将数据从1e18缩减到1e10;也正因为a范围 >> b范围,所以问的就是可以整除b的个数,即求b的因数即可。
#include <iostream>
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 (b % i == 0) ans += 2;
if (i * i == b) ans--;
}
cout << ans << endl;
return 0;
}