Uva 10892 LCM Cardinality (数论/暴力)

时间:2021-09-09 19:50:08

题意:给出数n,求有多少组A,B的最小公约数为n;

思路:3000ms,直接暴力寻找,找到所有能把n整除的数 pi, 枚举所有pi

代码:

#include <iostream>
#include <cstdio>
#include <vector>
#define ll long long
using namespace std; ll gcd(ll a,ll b)
{
if(b==) return a;
else return gcd(b,a%b);
} int main()
{
ll n;
while(cin>>n&&n)
{
vector <ll> p;
for(ll i=; i*i<=n; i++)
{
if(n%i==)
{
p.push_back(i);
if(n/i!=i)
p.push_back(n/i);
}
}
int ans=;
for(ll i=; i<p.size(); i++)
{
for(ll j=i; j<p.size(); j++)
{
if((p[i]*p[j]/gcd(p[i],p[j]))==n)
ans++;
}
}
printf("%lld %d\n",n,ans);
}
return ;
}