题目链接:

http://172.16.0.132/senior/#main/show/4668

题目:

题解:

考虑把A数组里的每个元素分解质因数,对于每个质因数开一个vector存一下包含这个质因数的元素对应的这个质因数的指数

我们可以枚举质因数分别处理。为什么时间复杂度是对的呢?因为对于任何一个元素质因数种类是不会很多的,而对于每个质因数我们仅考虑包含它的数而不是全部扫一遍,因而是对的

枚举质因数之后,我们得到它对应的指数序列。对于小于等于根号1e7的质因数,考虑把这个指数序列从小到大,对于某个位置与之前位置的贡献就是靠前位置的指数,因此我们不断累加前缀统计答案就好了;对于另外的质因数,可以发现包含它的指数序列只能是1,所以我们不需要排序可以直接得到答案(注意到要求计算的数列其实就是元素之间两两只算一次,但注意还需要算上和本身的gcd)

这个模数比较坑,直接乘取模的话会爆long long,因此我们采用慢速乘(不是类似快速幂的那种)

比如x*y,我们令inf=1e7

$a1=x \mod inf$

$a2=x/inf$

$b1=y \mod inf$

$b2=y/inf$

我们拆开来计算就是了,具体看代码

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll; const int N=4e4+;
const ll mo=1e11+;
const int M=1e6+;
const ll inf=1e7+;
int n,cnt;
int a[N],vis[inf];
ll p[N];
vector <int> pi[M];
inline int read()
{
char ch=getchar();int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
void div(int x)
{
for (int i=;i*i<=x;i++)
{
if (x%i) continue;
if (!vis[i]) p[++cnt]=i,vis[i]=cnt;
int s=;
while (x%i==) x/=i,++s;
pi[vis[i]].push_back(s);
}
if (x>)
{
if (!vis[x]) p[++cnt]=x,vis[x]=cnt;
pi[vis[x]].push_back();
}
}
ll mul(ll x,ll y)
{
ll a1=x%inf;
ll a2=x/inf;
ll b1=y%inf;
ll b2=y/inf;
ll re=;
re=(re+a2*inf%mo*b2%mo*inf%mo)%mo;
re=(re+a2*inf%mo*b1%mo)%mo;
re=(re+a1*inf%mo*b2%mo)%mo;
re=(re+a1*b1%mo)%mo;
return re;
}
ll qpow(ll x,ll y)
{
ll re=;
for (;y;y>>=,x=mul(x,x)) if (y&) re=mul(re,x);
return re;
}
int main()
{
n=read();
for (int i=;i<=n;i++) a[i]=read(),div(a[i]);
ll ans=;
for (int i=;i<=cnt;i++)
{
if (1ll*p[i]*p[i]<=inf)
{
int pnt=pi[i].size();
sort(pi[i].begin(),pi[i].end());
ll s=;
for (int j=;j<pnt;j++)
{
ans=mul(ans,qpow(p[i],s));
s+=pi[i][j];
}
}
else
{
ll c=pi[i].size();
ans=mul(ans,qpow(p[i],c*(c-)/));
}
}
for (int i=;i<=n;i++) ans=mul(ans,1ll*a[i]);
printf("%lld\n",ans);
return ;
}

[jzoj 4668] [NOIP2016提高A组模拟7.19] 腐败 解题报告(质数分类+慢速乘)的更多相关文章

  1. [JZOJ 100026] [NOIP2017提高A组模拟7.7] 图 解题报告 (倍增)

    题目链接: http://172.16.0.132/senior/#main/show/100026 题目: 有一个$n$个点$n$条边的有向图,每条边为$<i,f(i),w(i)>$,意 ...

  2. [jzoj 4722] [NOIP2016提高A组模拟8.21] 跳楼机 解题报告 (spfa+同余)

    题目链接: http://172.16.0.132/senior/#main/show/4722 题目: DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧.Srwudi的家是一幢h层的摩天 ...

  3. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)总结

    第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不 ...

  4. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数

    题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...

  5. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)树上路径

    题目 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和). 分析 点分治,设当前为x的,求在以x为根的子树中,经过x的路径(包括起点或 ...

  6. 【JZOJ4715】【NOIP2016提高A组模拟8.19】树上路径

    题目描述 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和) 输入 第一行给出N,S,E.N代表树的点数,S,E如题目描述. 下面N- ...

  7. [JZOJ 5437] [NOIP2017提高A组集训10.31] Sequence 解题报告 (KMP)

    题目链接: http://172.16.0.132/senior/#main/show/5437 题目: 题解: 发现满足上述性质并且仅当A序列的子序列的差分序列与B序列的差分序列相同 于是我们把A变 ...

  8. JZOJ 4732. 【NOIP2016提高A组模拟8.23】函数

    4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms  Memory Limits: 262144 KB  Detailed ...

  9. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

随机推荐

  1. Oracle 11G R2 RAC中的scan ip 的用途和基本原理

    Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个 ...

  2. 使用cxf3.0.4搭建webservice服务需要的最精简jar包

    转自:https://blog.csdn.net/w1014074794/article/details/47862163 下面是测试结果,只列出报错了的测试: 1.org.apache.catali ...

  3. HIT Software Construction Lab 5_经验总结

    前言: 终于写完lab5了,这次lab5是基于lab3的一次实验,主要是王忠杰老师提供了4个大约有50w行的大文件让我们根据自己所选应用读取其中两个并且创建轨道系统. 这次lab5优化的我很崩溃,因为 ...

  4. caffe mnist实例 --lenet_train_test.prototxt 网络配置详解

    1.mnist实例 ##1.数据下载 获得mnist的数据包,在caffe根目录下执行./data/mnist/get_mnist.sh脚本. get_mnist.sh脚本先下载样本库并进行解压缩,得 ...

  5. JS进阶 - 浏览器工作原理

    一.浏览器的结构 浏览器的主要组件为: 用户界面 - 包括地址栏.前进/后退按钮.书签菜单等.除了浏览器主窗口(显示页面),其他部分都属于用户界面. 浏览器引擎 - 在用户界面和渲染引擎之间传送指令. ...

  6. layui的多文件列表上传功能前端代码

    html页面的代码(注意:引入layui相关的css): <div class="layui-upload" style="margin-left: 130px&q ...

  7. java/javascript 时间操作工具类

    一.java 时间操作工具类 import org.springframework.util.StringUtils; import java.text.ParseException; import ...

  8. python pip fatal error in launcher unable to create process using

    用pip安装一个包,不知道为啥,就报了这个错误:python pip fatal error in launcher unable to create process using “”   百度了一下 ...

  9. css——外部样式

    外部样式 先建立一个css文件,如下: 然后开始写代码,不要加<style> 然后可以在html文件中的<head>内引用:<link rel="stylesh ...

  10. Laravel 多条件搜索查询

    做查询功能时,输入的关键词有的为空,有的有值,如何实现多功能查询呢?这里介绍一种方法.(基于laravel) 原理很简单,第一步:判断接收的值,第二步:写查询语句.具体实现如下: //首先,创建句柄: ...