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+;
int n,a[maxn],cnt,vis[maxn],prime[maxn];
int pre[maxn],vis1[maxn];
LL ans,cs; void Eular(){
for(int i=;i<maxn;++i){
if(!vis[i]) prime[cnt++]=i;
for(int j=;j<cnt&&i*prime[j]<maxn;++j){
vis[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
} void solve(int id,int x){
if(!vis1[x]){
vis1[x]=;
ans+=cs;
}
LL t=id--pre[x];
pre[x]=id;
ans-=1LL*t*(t+)/;
} int main(){
Eular();
scanf("%d",&n);
cs=1LL*n*(n+)/;
for(int i=;i<=n;++i)
scanf("%d",&a[i]);
for(int i=;i<=n;++i){
if(a[i]==) continue;
if(!vis[a[i]]){
solve(i,a[i]);
}
else{
int tmp=a[i];
for(int j=;j*j<=tmp;++j){
if(tmp%j==){
while(tmp%j==) tmp/=j;
solve(i,j);
}
}
if(tmp!=){
solve(i,tmp);
}
}
}
for(int i=;i<cnt;++i){
int t=pre[prime[i]];
if(t){
t=n-t;
ans-=1LL*t*(t+)/;
}
}
printf("%lld\n",ans);
}
2018南京icpc-J-Prime Game (欧拉筛+唯一分解定理)的更多相关文章
- hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)
Deciphering Password Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- hdu3826-Squarefree number-(欧拉筛+唯一分解定理)
Squarefree number Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu4497-GCD and LCM-(欧拉筛+唯一分解定理+组合数)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- 欧拉筛 线性筛 素数+莫比乌斯的mu[]
https://blog.csdn.net/qq_39763472/article/details/82428602 模板来自https://blog.csdn.net/Avalon_cc/artic ...
- 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )
题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...
- 2018ICPC 南京Problem J. Prime Game
题目: 题意:给出一个序列a1,⋯,ana1,⋯,an.fac(l,r)fac(l,r)为mul(l,r)mul(l,r)中不同质因数的个数. 请计算: ∑i=1n∑j ...
- 【BZOJ 2190】【SDOI 2008】仪仗队 欧拉筛
欧拉筛模板题 #include<cstdio> using namespace std; const int N=40003; int num=0,prime[N],phi[N]; boo ...
- [51NOD1181]质数中的质数(质数筛法)(欧拉筛)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1181 思路:欧拉筛出所有素数和一个数的判定,找到大于n的最小质 ...
- 素数筛&&欧拉筛
折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体 ...
随机推荐
- BZOJ 3679 数字之积 数位DP
思路:数位DP 提交:\(2\)次 错因:进行下一层\(dfs\)时的状态转移出错 题解: 还是记忆化搜索就行,但是要用\(map\)记忆化. 见代码 #include<cstdio> # ...
- 025_自动为其他脚本添加解释器信息#!/bin/bash
#!/bin/bash#先使用 grep 判断对象脚本是否已经有解释器信息,如果没有则使用 sed 添加解释器以及描述信息if ! grep -q "^#!" $1; then # ...
- vue-ckeditor-word粘贴
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- php大文件上传
PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...
- netstat 基本用法
Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字.如果你想确认系统上的 ...
- element-ui中el-table表格的使用(如何取到当前列的所有数据)
基本使用都不多说了, 我们知道这个表格组件,每个单元格内容是table绑定的data中的某个属性决定的,但是如果我们想根据这个属性值,渲染出另一个值呢,首先问题来了,我如何获得当前列的值, 查了查,我 ...
- 2019.6.28 校内测试 T1 Jelly的难题1
这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC): 按照“题意解释”的思路来思考这个题,那么就十分的简单了: 1.首先要读入这个字符矩阵,可以用cin ...
- c isnormal
Returns whether x is a normal value: i.e., whether it is neither infinity, NaN, zero or subnormal. / ...
- JAVA基础知识|抽象类与接口类
一.抽象类 抽象类:拥有抽象方法的类就是抽象类,抽象类要使用abstract声明 抽象方法:没有方法体的方法,必须要使用abstract修饰 为什么要使用抽象类,抽象方法? 举例来说,如果你定义了一个 ...
- DLL:操作数据库和表
1. 操作数据库 C(Create 创建) R(Retrieve 查询) U(Update 更新) D(Delete 删除) (1) 查询数据库 1) 查询所有数据库名称 SHOW DATABASES ...