#线性筛,哈希#CF1225D Power Products
题目
给定一个长度为 \(n\) 的正整数序列 \(a\),问有多少对 \((i,j),i<j\) 使得存在一个整数 \(x\) 满足 \(a_i\times a_j=x^k\)
分析
将 \(a_i\) 分解质因数可以发现,其实是要满足对于每个质因数的指数之和 \(c_i+c_j\) 是 \(k\) 的倍数
那么先将 \(10^5\) 以内的质数找出来,然后对于每个数求出指数模 \(k\) 的余数, 将其用字符串哈希压缩,然后求互补的对数就可以了
代码
#include <cstdio>
#include <cctype>
#include <map>
using namespace std;
typedef unsigned long long ull;
const int N=100011; map<ull,int>uk;
int v[N],prime[N],a[N],n,mx,Cnt,k; ull p[N],ans;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void Pro(int n){
v[1]=-1;
for (int i=2;i<=n;++i){
if (!v[i]) prime[++Cnt]=i,v[i]=Cnt;
for (int j=1;prime[j]<=n/i&&j<=Cnt;++j){
v[i*prime[j]]=j;
if (i%prime[j]==0) break;
}
}
}
int max(int a,int b){return a>b?a:b;}
int main(){
n=iut(),k=iut(),p[0]=1;
for (int i=1;i<=n;++i){
a[i]=iut();
mx=max(mx,a[i]);
}
Pro(mx);
for (int i=1;i<=Cnt;++i) p[i]=p[i-1]*5623;
for (int i=1;i<=n;++i){
ull t0=0,t1=0;
for (int j=1;j<=Cnt&&prime[j]<=a[i]/prime[j];++j)
if (a[i]%prime[j]==0){
int t=0;
while (a[i]%prime[j]==0)
a[i]/=prime[j],++t;
if ((t%=k)==0) continue;
t0+=p[j]*t,t1+=p[j]*(k-t);
}
if (a[i]>1) t0+=p[v[a[i]]],t1+=p[v[a[i]]]*(k-1);
ans+=uk[t1],++uk[t0];
}
return !printf("%llu",ans);
}
#线性筛,哈希#CF1225D Power Products的更多相关文章
- 【知识总结】线性筛_杜教筛_Min25筛
首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...
- 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记
最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...
- bzoj2693--莫比乌斯反演+积性函数线性筛
推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- 洛谷P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 Too many or Too few lines 样例解释有问题 ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
随机推荐
- git bash 的一些使用
一般使用git bash需要的命令 先打开git bash: git init 可以初始化一个本地的仓库 git status 查看仓库信息 mkdir test 创建一个test的文件夹 cd te ...
- Celey异步发送邮件时报django.core.exceptions.ImproperlyConfigured的解决办法
原main.py入口文件 #Celery的入口 from celery import Celery #创建Celery实例 生产者 celery_app = Celery('meiduo') #加载配 ...
- 都说了别用BeanUtils.copyProperties,这不翻车了吧
分享是最有效的学习方式. 博客:https://blog.ktdaddy.com/ 故事 新年新气象,小猫也是踏上了新年新征程,自从小猫按照老猫给的建议[系统梳理大法]完完整整地梳理完毕系统之后,小猫 ...
- 【LeetCode排序专题01】由旋转数组的最小数字引出的关于排序算法的讨论(冒泡排序、二分查找+暴力法)
旋转数组的最小数字 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一 ...
- MacOS安装多个jdk
环境 Mac os 为Yosemite 10.10.5版本,想要同时使用jdk7和jdk8. 下载jdk:http://www.Oracle.com/technetwork/Java/javase/d ...
- 【Azure 环境】使用az login登录遇见OSError: [WinError -2146893813] : '' 错误
问题描述 使用 az login指令登录,遇见 OS Error: [WinError -2146893813] : '', 在指令中添加 --debug后,输出的错误消息为: urllib3.con ...
- 【Azure 环境】如何解决Principal 2330xxxxxxxxxxxxxxxxxxxx31efc5 does not exist in the directory xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx问题
问题描述 在使用 Key Vault 和 Azure CLI 管理存储帐户密钥的官方文档中,其中有一步是"向 Key Vault 授予对你的存储帐户的访问权限", 其中CLI命令中 ...
- 【Azure 应用服务】使用命令行创建 webapp 应用出现命令语法不正确错误
问题描述 根据Azure App Service 入门文档 "快速入门:在 Linux 上的 Azure 应用服务中创建 Python 应用" 在创建App Service应用时候 ...
- 浅入Kubernetes(9):了解组件
本篇主要介绍 Kubernetes 中的架构组成,在前面我们已经学习到了 kubeadm.kubectl,这两个命令行工具是 k8s 组成之一.而前面在搭建集群时,也学到了 master.worker ...
- Anaconda与Python环境在Windows中的部署
本文介绍在Win10电脑中,安装Anaconda环境与Python语言的方法. 在这里需要注意,本文介绍的方法是在电脑自身原本不含有Python的情况下进行的:如果大家电脑中原本就下载.安装过 ...