找到a[i]*a[j]=x^k符合这个式子的有多少种组合。
分解质因子来做就行了
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<map>
using namespace std;
typedef long long ll;
typedef double ld;
const int INF = 1e5+9;
map<ll,ll> mp;
ll Power(ll x,ll n)
{
ll ret = 1;
for(ll i=1; i<=n; i++)
ret *= x;
return ret;
}
int main()
{
ll n,k,ans=0;
cin>>n>>k;
for(ll i=1; i<=n; i++)
{
ll tmp;
cin>>tmp;
ll x=1,y=1;
for(ll j=2; j*j<=tmp; j++)
{
int cnt=0;
while((tmp%j)==0)
{
tmp/=j;
cnt++;
}
cnt%=k;
if(cnt==0)
continue;
x*=Power(j,cnt);
y*=Power(j,k-cnt);
if(x>INF*INF)
x=0;
if(y>INF*INF)
y=0;
}
x*=Power(tmp,1);
y*=Power(tmp,k-1);
if(x>INF*INF)
x=0;
if(y>INF*INF)
y=0;
if(y)
ans+=mp[y];
if(x)
mp[x]++;
}
cout<<ans<<endl;
return 0;
}
标签:tmp,Power,596,ll,Codeforces,mp,INF,include,Round From: https://blog.51cto.com/u_15952369/6034926