• CF1225D


    [a_i*a_j=x^k\ a_i=prod_{i=1}^np_i^{A_i}~~~b_i=prod_{i=1}^np_i^{B_i}~~~x=prod_{i=1}^np_i^{C_i*k}\ prod_{i=1}^np_i^{A_i+B_i}=prod_{i=1}^np_i^{C_i*k}\ A_i+B_i=k*t~~~~~(A_i+B_i)\%k=0 ]

    每一个数在质因数分解的时候记录与x相同质因数相加是k的倍数的状态为x1

    用map维护每一个状态的合法总数,答案加上mp[x1],把mp[x]+1就好了

    map <vector< pair<int,int> > , int > mp;
    vector<pair<int,int>> x,x1; 
    int n,k,a[300005];
    long long ans=0;
    int main() {
    	scanf("%d%d",&n,&k);
    	for (int i=1;i<=n;++i) {
    		scanf("%d",&a[i]);
    		x.clear();x1.clear();
    		int aa=a[i];
    		for (int j=2;j*j<=a[i];++j) {
    			int tot=0;
    			while(aa%j==0) {
    				++tot;
    				aa/=j;
    				tot%=k;
    			}
    			if(!tot) continue;
    			x.push_back({j,tot});
    			x1.push_back({j,k-tot});
    		}
    		if(aa!=1) {
    			x.push_back({aa,1});
    			x1.push_back({aa,k-1});
    		}
    		ans=ans+mp[x1];
    		++mp[x];
    	}
    	printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    cf 785#
    hdu 4920 Matrix multiplication
    poj 2443 Set Operation
    bzoj 3687: 简单题
    洛谷 三月月赛 C
    洛谷 三月月赛 B
    洛谷 三月月赛 A
    bzoj 3156: 防御准备
    bzoj 3437: 小P的牧场
    bzoj 3675: [Apio2014]序列分割
  • 原文地址:https://www.cnblogs.com/shikeyu/p/13726016.html
Copyright © 2020-2023  润新知