把我写吐了 太弱了
首先按照欧拉函数性质 我只需要统计区间不同质数个数就好了
一眼主席树
其次我被卡了分解质因数这里
可以通过质数筛时就建边解决
不够灵性啊,不知道如何改

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+1000;
const int H = 5e4+5;
const int M = H*100;
const int mod = 1e6+777; int isprime[N];
int prime[N]; int prnum[N]; int cc = 0;
int rev[N], has[N];
struct Node{
int to,nex;
}E[N*3];
int head[N], eot = 0;
int n,q;
int a[H];
int T[H], ls[M], rs[M], v[M]; int tot;
int puf[H]; void add(int x,int y) {
E[eot].to = y; E[eot].nex = head[x]; head[x] = eot++;
}
int build(int l,int r) {
int rt = tot++;
v[rt] = 1;
if(l == r) return rt;
int mid = (l+r)>>1;
ls[rt] = build(l,mid); rs[rt] = build(mid+1,r);
return rt;
}
int upd(int pos,int num,int l,int r,int pr) {
int rt = tot++;
v[rt] = 1ll*v[pr]*num%mod;
if(l == r) return rt;
int mid = (l+r)>>1;
if(pos <= mid) {
ls[rt] = upd(pos,num,l,mid,ls[pr]); rs[rt] = rs[pr];
}else {
ls[rt] = ls[pr]; rs[rt] = upd(pos,num,mid+1,r,rs[pr]);
}
return rt;
}
int query(int L,int R,int l,int r,int rt) {
if(L <= l && r <= R) return v[rt];
int mid = (l+r)>>1;
int ans = 1;
if(L <= mid) ans = 1ll*ans*query(L,R,l,mid,ls[rt]) %mod;
if(R > mid) ans = 1ll*ans*query(L,R,mid+1,r,rs[rt]) %mod;
return ans;
}
void debug(int l,int r,int rt) {
printf("%d %d %d\n",l,r,v[rt]);
if(l == r) return;
int mid = (l+r)>>1;
debug(l,mid,ls[rt]); debug(mid+1, r, rs[rt]);
} int main(){
memset(head,-1,sizeof(head));
for(int i = 2; i < N; ++i) {
if(!isprime[i]) {
prime[++cc] = i;
for(int j = i; j < N; j += i) {
isprime[j] = 1;
add(j,i);
}
}
}
rev[0] = rev[1] = 1;
for(int i=2;i< N;++i) {
rev[i]= 1ll*(mod-mod/i)* rev[mod%i]%mod;
}
for(int i = 1; i <= cc; ++i) {
prnum[prime[i]] = 1ll*(prime[i]-1) * rev[prime[i]] %mod;
} while(~scanf("%d %d",&n,&q)) {
memset(has,0,sizeof(has));
for(int i = 1; i <= n; ++i) scanf("%d",&a[i]);
tot = 0; puf[0] = 1;
T[0] = build(1,n);
for(int i = 1; i <= n; ++i) {
puf[i] = 1ll*puf[i-1]*a[i]%mod;
int tmp = T[i-1];
int tt = 1;
for(int j = head[a[i]]; j != -1; j = E[j].nex) {
int x = E[j].to;
if(has[x])
tmp = upd(has[x],rev[prnum[x]],1,n,tmp);
tt = 1ll*tt*prnum[x]%mod;
has[x] = i;
}
T[i] = upd(i,tt,1,n,tmp);
} int ans = 0;
for(int i = 0; i < q; ++i) {
int l,r; scanf("%d %d",&l,&r);
l^=ans; r^=ans;
ans = query(l,r,1,n,T[r]);
ans = 1ll*ans*puf[r]%mod *rev[puf[l-1]] %mod;
printf("%d\n",ans);
} }
return 0;
}

bzoj 4026 dC Loves Number Theory的更多相关文章

  1. bzoj 4026 dC Loves Number Theory 主席树+欧拉函数

    题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...

  2. BZOJ 4026 dC Loves Number Theory (主席树+数论+欧拉函数)

    题目大意:给你一个序列,求出指定区间的(l<=i<=r) mod 1000777 的值 还复习了欧拉函数以及线性筛逆元 考虑欧拉函数的的性质,(l<=i<=r),等价于 (p[ ...

  3. BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学

    Code: #include <bits/stdc++.h> #define ll long long #define maxn 50207 #define setIO(s) freope ...

  4. 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树

    [BZOJ4026]dC Loves Number Theory Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.    给 ...

  5. BZOJ4026: dC Loves Number Theory

    Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭的水题资源.    给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所 ...

  6. 【bzoj4026】dC Loves Number Theory 可持久化线段树

    题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.  给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...

  7. [BZOJ4026]dC Loves Number Theory(线段树)

    根据欧拉函数的定义式可知,可以先算出a[l]*a[l+1]*...*a[r]的值,然后枚举所有存在的质因子*(p-1)/p. 发现这里区间中一个质因子只要计算一次,所以指计算“上一个同色点在区间外”的 ...

  8. [BZOJ4026]dC Loves Number Theory 欧拉函数+线段树

    链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质 ...

  9. [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数

    dC Loves Number Theory 题目大意:dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问 ...

随机推荐

  1. Springboot security cas源码陶冶-CasAuthenticationFilter

    Springboot security cas整合方案中不可或缺的校验Filter类或者称为认证Filter类,其内部包含校验器.权限获取等,特开辟新地啃啃 继承结构 - AbstractAuthen ...

  2. make和makefile简明基础

    0.make.makefile是什么? makefile定义了一系列的规则,来规定哪些部分先编译,哪些部分后编译,写好makefile以后,只需一个make命令就可以让整个工程完全自动编译,所以简单的 ...

  3. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  4. iOS学习——布局利器Masonry框架源码深度剖析

    iOS开发过程中很大一部分内容就是界面布局和跳转,iOS的布局方式也经历了 显式坐标定位方式 --> autoresizingMask --> iOS 6.0推出的自动布局(Auto La ...

  5. C# 使用 Lotus notes 公共邮箱发送邮件

    公司的邮件系统用的是反人类的 Lotus notes, 你敢信? 最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前前后后这个问题搞了2天,由于公司的诸多条件限制,无法直接调用到公司发送邮 ...

  6. 2018/1/9 redis学习笔记(一)

    本文不涉及redis基本命令以及javaapi的解释操作; 首先介绍下redis,一个nosql非关系型数据库,运行在缓存中,特点就是可存储的数据结构类型很多,做为KEY-VALUE数据库,它的键只能 ...

  7. [Swift]UIKit学习之警告框:UIAlertController和UIAlertView

    Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) T ...

  8. PHP 变量的实现原理

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  9. Sping Boot入门到实战之入门篇(一):Spring Boot简介

    该篇为Spring Boot入门到实战系列入门篇的第一篇.对Spring Boot做一个大致的介绍. 传统的基于Spring的Java Web应用,需要配置web.xml, applicationCo ...

  10. C语言_结构体的4种定义初始化方式及案例

    结构体是一种构造数据类型 (构造数据类型:数组类型.结构体类型(struct).共用体类型(union)).用途:把不同类型的数据组合成一个整体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一 ...