画一下柿子就知道是求区间乘积乘区间内所有质因数的(p-1)/p(就是求欧拉的公式嘛)

看上去莫队就很靠谱然而时间O(nsqrt(n)logn)并不资瓷

还是离线,确定右端点,对于1~i的区间内的质因数我们在树状数组把他们插入到最后一次出现的位置,然后扫一次求逆元+找质因数O(nlog^2n)

注意算质因子的时候不能用试除法啊

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
int quick_pow(int A,int p)
{
int ret=;
while(p!=)
{
if(p%==)ret=(LL)ret*A%mod;
A=(LL)A*A%mod;p/=;
}
return ret;
}
int inv(int A){return quick_pow(A,mod-);} int pr,prime[],pm[];
bool v[];
void get_prime()
{
pr=;
for(int i=;i<=;i++)
{
if(v[i]==false)prime[++pr]=i,pm[i]=i;
for(int j=;j<=pr&&i*prime[j]<=;j++)
{
v[i*prime[j]]=true;
pm[i*prime[j]]=min(pm[i],prime[j]);
if(i%prime[j]==)break;
}
}
} int n;LL s[];
int lowbit(int x){return x&-x;}
void change(int x,LL k)
{
while(x<=n)
{
s[x]=s[x]*k%mod;
x+=lowbit(x);
}
}
LL getsum(int x)
{
LL ret=;
while(x>)
{
ret=ret*s[x]%mod;
x-=lowbit(x);
}
return ret;
} int a[];LL sm[];
struct query{int l,r,id;}q[];int as[];
bool cmp(query q1,query q2){return q1.r<q2.r;}
int last[];
int main()
{
get_prime();
scanf("%d",&n);
sm[]=;
for(int i=;i<=n;i++)
scanf("%d",&a[i]), sm[i]=sm[i-]*a[i]%mod;
int Q;
scanf("%d",&Q);
for(int i=;i<=Q;i++)
scanf("%d%d",&q[i].l,&q[i].r), q[i].id=i;
sort(q+,q+Q+,cmp); int j=;
memset(last,,sizeof(last));
for(int i=;i<=n;i++)s[i]=;
for(int i=;i<=n;i++)
{
int d=a[i];
while(d>)
{
int p=pm[d];LL c=(LL)(p-)*inv(p)%mod;
if(last[p]>)change(last[p],inv(c));
last[p]=i;
change(last[p],c);
while(d%p==)d/=p;
} while(j<=Q&&q[j].r==i)
{
as[q[j].id]=sm[q[j].r]*inv(sm[q[j].l-])%mod*getsum(q[j].r)%mod*inv(getsum(q[j].l-))%mod;
j++;
}
} for(int i=;i<=Q;i++)printf("%d\n",as[i]);
return ;
}

51nod 1642 区间欧拉函数 && codeforce594D REQ的更多相关文章

  1. 【51Nod 1239】欧拉函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 还是模板题. 杜教筛:\[S(n)=\frac{n(n+1)}{2 ...

  2. 【51nod】1239 欧拉函数之和 杜教筛

    [题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varph ...

  3. 【51nod】1239 欧拉函数之和

    题解 写完上一道就开始写这个,大体上就是代码改了改而已= = 好吧,再推一下式子! \(\sum_{i = 1}^{n}i = \sum_{i = 1}^{n}\sum_{d | i}\phi(d) ...

  4. 51nod 1239 欧拉函数之和(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 [题目大意] 计算欧拉函数的前缀和 [题解] 我们 ...

  5. 51nod 1040 最大公约数之和(欧拉函数)

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   给出一个n,求1-n这n个数,同n的最大公约数的和.比如: ...

  6. Codeforces Round #538 (Div. 2) F 欧拉函数 + 区间修改线段树

    https://codeforces.com/contest/1114/problem/F 欧拉函数 + 区间更新线段树 题意 对一个序列(n<=4e5,a[i]<=300)两种操作: 1 ...

  7. [51Nod 1244] - 莫比乌斯函数之和 & [51Nod 1239] - 欧拉函数之和 (杜教筛板题)

    [51Nod 1244] - 莫比乌斯函数之和 求∑i=1Nμ(i)\sum_{i=1}^Nμ(i)∑i=1N​μ(i) 开推 ∑d∣nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n== ...

  8. 51nod 1040最大公约数和(欧拉函数)

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个n,求1-n这n个数,同n的最大公约数 ...

  9. 51Nod 1136 欧拉函数 Label:数论

    对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi( ...

随机推荐

  1. margin与padding如何进行区分

    margin与padding如何进行区分,这是很多学html人的困扰,其实说白了padding 就是内容与边框的空隙.而margin则是模块与模块的空隙.[3]

  2. Jmeter的属性和变量

    jmeter的属性和变量可以简单理解为编程里面的全局变量和局部变量.属性是全局可见,可以跨线程组传递调用,而变量基本上只能存在于一个线程组中(在测试计划定义的变量也是可以跨线程组传递的).同线程组内的 ...

  3. axios方法封装

    axios方法封装 一般情况下,我们会用到的方法有:GET,POST,PUT,PATCH,封装方法如下:     五.封装后的方法的使用 1.在main.js文件里引用之前写好的文件,我的命名为htt ...

  4. 让ios支持http协议

    ios默认只支持https协议,打开info.plist文件,加入以下设置 NSAppTransportSecurity NSAllowsArbitraryLoads

  5. vue+axios上传文件

    单独上传文件: <input class="file" name="file" type="file" accept="im ...

  6. Redis系列(六)--为什么这么快?

    Redis作为一个基于key-value的NoSQL数据库,最显著的特点存取速度非常快,官方说可以达到10W OPS,但是Redis为何这么快? 1.开发语言 Redis使用C语言进行编写的,而Uni ...

  7. Ubuntu搭建LAMP开发环境

    1.安装Apache sudo apt-get install apache2 测试: 浏览器访问 (如:http://localhost),出现It Works!网页. 查看状态: service ...

  8. ls 命令还能这么玩?看一下这 20 个实用范例

    Linux中一个基本命令是ls.没有这个命令,我们会在浏览目录条目时会遇到困难.这个命令必须被每个学习Linux的人知道. ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上 ...

  9. [Git]Please make sure you have the correct access rights and the repository exists

    这个问题是这样,需要在已有github账号的A机器上,再创建一个github账号,新账号创建完毕,将代码通过机器A push上之后,再另一台机器B,clone 这个项目时报出了如下错误: Permis ...

  10. 题解 NOI2018 归程

    题解 NOI2018 归程 题意 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l, ...