题意:给定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 (欧拉筛+唯一分解定理)的更多相关文章

  1. hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)

    Deciphering Password Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. hdu3826-Squarefree number-(欧拉筛+唯一分解定理)

    Squarefree number Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. hdu4497-GCD and LCM-(欧拉筛+唯一分解定理+组合数)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  4. 欧拉筛 线性筛 素数+莫比乌斯的mu[]

    https://blog.csdn.net/qq_39763472/article/details/82428602 模板来自https://blog.csdn.net/Avalon_cc/artic ...

  5. 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )

    题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...

  6. 2018ICPC 南京Problem J. Prime Game

    题目: 题意:给出一个序列a1,⋯,ana1,⋯,an.fac(l,r)fac(l,r)为mul(l,r)mul(l,r)中不同质因数的个数. 请计算:                 ∑i=1n∑j ...

  7. 【BZOJ 2190】【SDOI 2008】仪仗队 欧拉筛

    欧拉筛模板题 #include<cstdio> using namespace std; const int N=40003; int num=0,prime[N],phi[N]; boo ...

  8. [51NOD1181]质数中的质数(质数筛法)(欧拉筛)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1181 思路:欧拉筛出所有素数和一个数的判定,找到大于n的最小质 ...

  9. 素数筛&&欧拉筛

    折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体 ...

随机推荐

  1. Codeforces Round #588 (Div. 2) D题【补题ING】

    思路:先找出现次数>=2数.然后在取跑所有数,需要考虑一般情况(当一个人比另一个人的ai小且他们的与运算等于小的那个人的ai那么可以知道大的那个人必定强于ai小的那个人). 则可以用位运算实现判 ...

  2. PHP mysqli_connect_error() 函数

    返回上一次连接错误的错误描述: <?php $con=mysqli_connect("localhost","wrong_user","my_p ...

  3. 016_编写脚本快速克隆 KVM 虚拟机

    #!/bin/bash#本脚本针对 RHEL7.2 或 Centos7.2#本脚本需要提前准备一个 qcow2 格式的虚拟机模板,名称为/var/lib/libvirt/images/.rh7_tem ...

  4. 五十四.自定义镜像及仓库、持久化存储 、 Docker网络架构

    1. 制作自定义镜像(base基础镜像,搭建共性环境) 基于centos镜像使用commit创建新的镜像文件 基于centos镜像使用Dockerfile文件创建一个新的镜像文件   1.1 使用镜像 ...

  5. 薛的lca讲课配到题解

    2.15 LCA Nearest Common Ancestors POJ 1330 题意:给出一棵树, 询问两个点的最近公共祖先. 思路: $LCA$模板题,请各位掏出各式各样的模板A穿它. #in ...

  6. CF1140F Extending Set of Points 【按时间分治,并查集】

    题目链接:洛谷 首先我们考虑没有撤回操作的情况,就是将每一行和每一列看做一个点(代表行的称为白点,代表列的称为黑点),每个点$(x,y)$看做一条边. Extend操作实际上就是$x_1$行与$y_1 ...

  7. 2-SAT两题

    看了大白书,学习了一下two-sat,很有意思的算法.题目就是大白书上的两题. 仅仅放一下代码作为以后的模板参考. #include <stdio.h> #include <algo ...

  8. 我对java多进程多线程的浅显理解

    linux内核调度算法--CPU时间片如何分配: http://blog.csdn.net/russell_tao/article/details/7103012(转载)  ,通过该文章我们知道了进程 ...

  9. pwn学习日记Day21 《程序员的自我修养》读书笔记

    Linux内核装载ELF过程 (1)bash进程调用fork()系统调用创建一个新的进程 (2)新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程 ...

  10. 感知机与BP神经网络的简单应用

    感知机与神经元 感知机(Perceptron)由两层神经元组成(输入层.输出层),输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic un ...