Technocup 2020 - Elimination Round 2 D. Power Products(唯一分解定理+质因子分解+暴力枚举)(妙题)

题目链接
在这里插入图片描述
思路:由唯一分解定理我们可知,对于一个数a【i】要满足条件的话,a【j】和a【i】必须含有相同的质因子,同时相同质因子的指数和必须是k的倍数才行,一开始想复杂了,想把质因子分开存一个个枚举,其实不用那么麻烦,用map记录一下前面满足条件的1~i-1的质因子数组。

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
typedef long long ll;
vector<pair<int,int>>v;
map<vector<pair<int,int>>,int>p;
int n,k,t,num;
ll ans;
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i)
	{
		v.clear();
		scanf("%d",&t);
		v.push_back({1,1});
		int temp=t;
		for(int j=2;j<=sqrt(temp);++j)//质因数分解
		{
			num=0;
		while(t%j==0) t/=j,num++;
			num%=k;
			if(num!=0) v.push_back({j,num});
		 } 
		 if(t!=1) v.push_back({t,1});
		 ans+=p[v];
		 for(int j=1;j<v.size();++j) v[j].second=k-v[j].second;
		 p[v]++;
	}
	printf("%lld\n",ans);
}
发布了144 篇原创文章 · 获赞 0 · 访问量 4953

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104451524