Codeforces 1247D. Power Products

传送门

要满足存在 $x$ ,使得 $a_i \cdot a_j = x^k$

那么充分必要条件就算 $a_i \cdot a_j$ 质因数分解后每个质因数的次幂都要为 $k$ 的倍数

证明显然

设 $a_i=\sum_{j=1}^{x}p_j^{t_j}$ ,那么不妨变成 $\sum_{j=1}^{x}p_j^{t_j \mod k}$

然后考虑固定 $j$,设 $a_j=\sum_{k=1}^{x}p_k^{t_k}$ ,只要求有多少 $a_i$ 的值为 $\sum_{k=1}^{x}p_k^{k-t_k}$ 即可

用 $map$ 维护一下就行了,具体看代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) f=-1; ch=getchar(); }
    while(ch>=‘0‘&&ch<=‘9‘) { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=2e5+7;
int n,K;
int pri[N],fir[N],tot;
bool not_pri[N];
void pre()
{
    not_pri[1]=1; fir[1]=1;
    for(int i=2;i<N;i++)
    {
        if(!not_pri[i]) pri[++tot]=i,fir[i]=i;
        for(int j=1;j<=tot;j++)
        {
            ll g=1ll*i*pri[j]; if(g>=N) break;
            not_pri[g]=1; fir[g]=pri[j];
            if(i%pri[j]==0) break;
        }
    }
}
map <ll,int> cnt;
int main()
{
    pre();
    n=read(),K=read(); ll ans=0;
    for(int i=1;i<=n;i++)
    {
        int t=read(); vector < pair<int,int> > P;
        while(t!=1)
        {
            int &p=fir[t];
            if((!P.size())||p!=P.back().first)
                P.push_back(make_pair(p,1));
            else P.back().second++;
            t/=p;
        }
        ll x=1,y=1; bool GG=0;
        for(auto d: P)
        {
            for(int j=1;j<=d.second%K;j++)
                x*=d.first;
            for(int j=1;j<=(K-(d.second%K))%K;j++)
            {
                if(y>=N) { GG=1; break; }
                y*=d.first;
            }
        }
        if(!GG) ans+=cnt[y]; cnt[x]++;
    }
    printf("%lld\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/LLTYYC/p/11748422.html

时间: 2024-11-08 09:57:41

Codeforces 1247D. Power Products的相关文章

[Codeforces 1246B] Power Products (STL+分解质因数)

[Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i \times a_j = x^k (x \in \mathbb{N}^+)\).即这两个数乘起来恰好为一个正整数的\(k\)次方 \(a_i,n \leq 10^5\) 分析 考虑\(x^k\)的质因数分解式 , 那么每一项的指数一定是k的倍数,即 \(k|x_i\). 因此对于每个 \(a_i\)

[CodeForces - 1225D]Power Products 【数论】 【分解质因数】

[CodeForces - 1225D]Power Products [数论] [分解质因数] 题目描述 Time limit 2000 ms Memory limit 524288 kB Source Technocup 2020 - Elimination Round 2 Tags hashing math number theory *1900 Site https://codeforces.com/problemset/problem/1225/D 题面 Example Input 6

Codeforces Round #596 div2 D. Power Products

\(预先枚举1e10以内所有数的k次方,然后每一个ai都去找他所有的1e5以内的倍数,更新答案.\) \(复杂度\sqrt[k]{1e10}\times{\sqrt{1e5}\times{2}}\) #include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=1e5+100; int n,k; int a[N],vis[N]; ll b[N]; ll qpow(ll a,ll b) { ll an

Codeforces 906D Power Tower(欧拉函数 + 欧拉公式)

题目链接  Power Tower 题意  给定一个序列,每次给定$l, r$ 求$w_{l}^{w_{l+1}^{w_{l+2}^{...^{w_{r}}}}}$  对m取模的值 根据这个公式 每次递归计算. 因为欧拉函数不断迭代,下降到$1$的级别大概是$log(m)$的,那么对于每一次询问最多需要递归$log(m)$次 注意每次求解欧拉函数的时候要用map存下来,方便以后查询 #include <bits/stdc++.h> using namespace std; #define re

CodeForces 907F Power Tower(扩展欧拉定理)

Priests of the Quetzalcoatl cult want to build a tower to represent a power of their god. Tower is usually made of power-charged rocks. It is built with the help of rare magic by levitating the current top of tower and adding rocks at its bottom. If

CodeForces 906D Power Tower &lt;&lt;欧拉降幂

题意 给定n个数,q次询问,每次输出[l,r]区间的超级幂,对m取模. 思路 超级幂问题就想到用欧拉降幂来处理 欧拉降幂公式:$a^b \% m=a^{b\%\varphi (m)+\varphi(m)}\%m,(b>\varphi(m))$ 本题用递归处理欧拉降幂,在$logm$次降幂后$\varphi(m)=1$,然后回溯时用快速幂进行计算,总的复杂度大约是$log^{2}m$ $w_0^{w_1^{w_2^{w_3^{...}}}}\% m = w_0^{[w_1^{w_2^{w_3^{.

[CodeForces - 906D] Power Tower——扩展欧拉定理

题意 给你 $n$ 个数 $w$ 和一个数 $p$,$q$个询问,每次询问一个区间 $[l,r] $,求 $w_l^{(w_{l+1}^{(w_{l+2}…^{w_r})})}\mod p$. 分析 由扩展欧拉定理: $$a^b\equiv \begin{cases} a^{b\%\phi(p)}~~~~~~~~~~~gcd(a,p)=1\\ a^b~~~~~~~~~~~~~~~~~~gcd(a,p)\neq1,b<\phi(p)\\ a^{b\%\phi(p)+\phi(p)}~~~~gcd(

无线电源传输 Wireless Power Consortium (WPC) Communication

Universally Compatible Wireless Power Using the Qi Protocol Wireless charging of portable electronic devices is here now. It will become ubiquitous when all such devices adhere to the same standard. By Upal Sengupta and Bill Johns, Texas Instruments

codeforces选做

收录了最近本人完成的一部分codeforces习题,不定期更新 codeforces 1132E Knapsack 注意到如果只使用某一种物品,那么这八种物品可以达到的最小相同重量为\(840\) 故答案一定可以被写成\(840k+x(k,x\in N_+)\),我们将\(x\)称为"余下的部分" 故而设\(dp[i][j]\)为当前考虑了前\(i\)个物品,它们所占的余下的部分的重量为\(j\)时,最多可以组成多少个\(840\) 对于每个\(i\)预处理出枚举上界暴力转移即可 #i