2018南京icpc-J-Prime Game (欧拉筛+唯一分解定理)
时间:2019-10-31
本文章向大家介绍2018南京icpc-J-Prime Game (欧拉筛+唯一分解定理),主要包括2018南京icpc-J-Prime Game (欧拉筛+唯一分解定理)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:给定n个数ai(n<=1e6,ai<=1e6),定义,并且fac(l,r)为mul(l,r)的不同质因数的个数,求
思路:可以先用欧拉筛求出1e6以内的所有质数,然后对所有ai判断,如果ai不是质数就利用唯一分解定理计算其所有质因数。然后按照顺序依次计算每个质因子的贡献。假设n=5,对质因子2,依次记录它在数组出现的下标,如果它在2、4下标出现了,那么它的贡献即为所有包含2或4的区间个数,逆向计算,即所有区间个数-不包含2和4的区间个数,即
n(n+1)/2-m1(m1+1)/2-m2(m2+1)/2-m3(m3+1)/2,其中m1=2-1-0=1,m2=3-2=1,m3=5-4=1,即3块不包含2和4的子区间长度。
AC代码:
#include<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; typedef long long LL; const int maxn=1e6+5; int n,a[maxn],cnt,vis[maxn],prime[maxn]; int pre[maxn],vis1[maxn]; LL ans,cs; void Eular(){ for(int i=2;i<maxn;++i){ if(!vis[i]) prime[cnt++]=i; for(int j=0;j<cnt&&i*prime[j]<maxn;++j){ vis[i*prime[j]]=1; if(i%prime[j]==0) break; } } } void solve(int id,int x){ if(!vis1[x]){ vis1[x]=1; ans+=cs; } LL t=id-1-pre[x]; pre[x]=id; ans-=1LL*t*(t+1)/2; } int main(){ Eular(); scanf("%d",&n); cs=1LL*n*(n+1)/2; for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i){ if(a[i]==1) continue; if(!vis[a[i]]){ solve(i,a[i]); } else{ int tmp=a[i]; for(int j=2;j*j<=tmp;++j){ if(tmp%j==0){ while(tmp%j==0) tmp/=j; solve(i,j); } } if(tmp!=1){ solve(i,tmp); } } } for(int i=0;i<cnt;++i){ int t=pre[prime[i]]; if(t){ t=n-t; ans-=1LL*t*(t+1)/2; } } printf("%lld\n",ans); }
原文地址:https://www.cnblogs.com/FrankChen831X/p/11769741.html
- Java基础-day06-知识点回顾与练习
- 【Go 语言社区】Golang语言的多核并行化例子
- 一条SQL语句的执行计划变化探究(r10笔记第9天)
- 【Go 语言社区】Web 通信 之 长连接、长轮询(long polling)--转
- Dubbo入门-协议;注册中心
- Oracle 12c PDB浅析(二)(r8笔记第29天)
- 【Go 语言社区】在 Go 语言中,如何正确的使用并发
- Data Guard高级玩法:通过闪回恢复failover备库 (r10笔记第7天)
- ajax跨域问题-web开发必会
- 在线重定义的补充测试(r10笔记第26天)
- 聊聊Data Guard中的DG Broker(r10笔记第24天)
- stuts2返回json数据简单实现
- Linux命令ssh-copy-id (r10笔记第21天)
- 【Go 语言社区】HTML5 canvas验证码识别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux磁盘管理之LVM快速入门配置
- 你熟悉Python的代码规范吗?如何一键实现代码排版
- Deepin安装与基础使用
- Golang 单元测试详尽指引
- Pigeon- Flutter多端接口一致性以及规范化管理实践
- Linux之PAM系统模块详解说明
- 快速上手联邦学习——腾讯自研联邦学习平台PowerFL实战
- Linux发行版的镜像网站及开源软件收集
- 自建图床应用,我只推荐 Serverless
- 手把手教你使用 Nginx Ingress 实现金丝雀发布
- Kettle构建Hadoop ETL实践(六):数据转换与装载
- 从面试角度一文学完 Kafka
- Kettle构建Hadoop ETL实践(七):定期自动执行ETL作业
- 轻松理解JVM的分代模型
- Mybatis的几种传参方式,你了解多少?