[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\), 把它的质因数分解结果\(\sum p_i^{x_i}\)记录在一个数组中,每个元素形如\((p_i, x_i \ \mathrm{mod}\ k )\)

那么 \(a_j\)的质因数分解为 $\sum p_i^{k-x_i \ \mathrm{mod} k } $.

所以只要求有多少个数组满足每一项都是$ (p_i,k-x_i \mathrm{mod}\ k) $.用 map< vector< pair<int,int> >, int> cnt; 存储就可以了

每个数组的大小为 \(O(\log n)\) ,总时间复杂度为 \(O(n \log ^2 n)\)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<vector>
#define maxv 100000
#define maxn 100000
using namespace std;
typedef long long ll;
int n,k;
map< vector< pair<int,int> >, int> cnt;
vector< pair<int,int> >p1,p2;
int a[maxn+5];
int vis[maxv+5];
int minprime[maxv+5];
int prime[maxv+5]; void sieve(int n) {
vis[1]=1;
for(int i=2; i<=n; i++) {
if(!vis[i]) {
minprime[i]=i;
prime[++k]=i;
}
for(ll j=1; j<=k&&(ll)i*prime[j]<=n; j++) {
minprime[(ll)i*prime[j]]=prime[j];
vis[(ll)i*prime[j]]=1;
if(!(i%prime[j])) break;
}
}
} void divide(int x) {
if(!vis[x]) {
p1.push_back(make_pair(x,1));
p2.push_back(make_pair(x,k-1));
return;
}
while(x>1) {
int t=minprime[x],u=0;;
while(x%t==0&&x!=1) {
x/=t;
u=(u+1)%k;
}
if(u!=0){
p1.push_back(make_pair(t,u));
p2.push_back(make_pair(t,k-u));
}
}
} void print(vector< pair<int,int> > &x){
for(int i=0;i<x.size();i++){
printf("(%d,%d) ",x[i].first,x[i].second);
}
printf("\n");
}
int main(){
sieve(100000);
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
ll ans=0;
for(int i=1;i<=n;i++){
p1.clear();
p2.clear();
divide(a[i]);
// print(p1);
// print(p2);
ans+=cnt[p2];
cnt[p1]++; }
printf("%I64d\n",ans);
}

最新文章

  1. python实现最简单的计算器功能源码
  2. OS X Yosemite Beta体验
  3. git/ssh捋不清的几个问题
  4. 往sql数据库表中添加字段
  5. jqgrid单元格设置空值的方法
  6. 独立说&amp;花旗世界公民精英讲座胜利举行!
  7. Django - staticfiles,STATIC_ROOT, STATIC_URL,STATICFILES_DIRS
  8. Spring.Net-创建对象
  9. 记一次gitlab添加账号收不到邮件的解决办法
  10. 关于redis 缓存的问题
  11. 【caffe】Error parsing text-format NetParameter: ****:**:Expected string.
  12. 下载安装ActiveMQ(消息队列)
  13. [USACO12FEB]牛的IDCow IDs
  14. 关于mysql主从架构master宕机后,请求转移问题解决办法
  15. ssm实现图片上传
  16. SourceInsight宏插件3(非常好用,强力推荐)
  17. Javaweb过滤器
  18. PS调出唯美冷色情侣婚纱写真照
  19. 如何在Lua与C/C++之间实现table数据的交换
  20. MySQL:数据类型介绍

热门文章

  1. 两句话掌握 Python 最难知识点——元类
  2. ASP教程:gb2312和utf-8乱码问题解决
  3. 部署jumpserver
  4. C++ - C++简介
  5. Python os模块方法
  6. SPFA算法的SLF优化 ——loj#10081. 「一本通 3.2 练习 7」道路和航线
  7. Tomcat配置多域名 Alias
  8. tomcat+nginx负载均衡
  9. jdk环境配置(windows版)
  10. 第三周syh