#38. 【清华集训2014】奇数国

思路:

  题目中的number与product不想冲;

  即为number与product互素;

  所以,求phi(product)即可;

  除一个数等同于在模的意义下乘以一个数的逆元;

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 100005
#define mod 19961993
#define ll long long struct TreeNodeType {
ll l,r,mid; ll dis1,dis2;
};
struct TreeNodeType tree[maxn<<]; ll n,m,cntp; ll bit[],ans1,ans2,pi_[],pi[]; bool if_p[]; inline void in(ll &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} ll poww(ll pos)
{
pos%=mod;
ll mi=mod-,res=;
while(mi)
{
if(mi&) res=(res*pos)%mod;
mi>>=,pos=(pos*pos)%mod;
}
return res;
} void tree_build(ll now,ll l,ll r)
{
tree[now].l=l,tree[now].r=r;
if(l==r)
{
tree[now].dis1=bit[],tree[now].dis2=;
return ;
}
tree[now].mid=l+r>>;
tree_build(now<<,l,tree[now].mid);
tree_build(now<<|,tree[now].mid+,r);
tree[now].dis1=tree[now<<].dis1|tree[now<<|].dis1;
tree[now].dis2=tree[now<<].dis2*tree[now<<|].dis2%mod;
} void tree_to(ll now,ll to,ll dis1,ll dis2)
{
if(tree[now].l==tree[now].r)
{
tree[now].dis1=dis1,tree[now].dis2=dis2;
return ;
}
if(to<=tree[now].mid) tree_to(now<<,to,dis1,dis2);
else tree_to(now<<|,to,dis1,dis2);
tree[now].dis1=tree[now<<].dis1|tree[now<<|].dis1;
tree[now].dis2=tree[now<<].dis2*tree[now<<|].dis2%mod;
} void tree_query(ll now,ll l,ll r)
{
if(tree[now].l==l&&tree[now].r==r)
{
ans1|=tree[now].dis1;
ans2=(ans2*tree[now].dis2)%mod;
return ;
}
if(l>tree[now].mid) tree_query(now<<|,l,r);
else if(r<=tree[now].mid) tree_query(now<<,l,r);
else tree_query(now<<,l,tree[now].mid),tree_query(now<<|,tree[now].mid+,r);
} int main()
{
for(ll i=;i<=;i++)
{
if(!if_p[i]) pi[++cntp]=i;
for(ll j=;pi[j]*i<=&&j<=cntp;j++)
{
if_p[i*pi[j]]=true;
if(i%pi[j]==) break;
}
}
for(ll i=;i<=;i++)
{
pi_[i]=poww(pi[i]);
if(i==) bit[i]=;
else bit[i]=bit[i-]<<;
}
in(n);tree_build(,,maxn-);
ll op,ai,bi;
for(;n--;)
{
in(op),in(ai),in(bi);
if(op==)
{
ll pos=;
for(ll i=;i<=;i++) if(bi&&(bi%pi[i]==)) pos+=bit[i];
bi%=mod;tree_to(,ai,pos,bi);
}
else
{
ll ans;ans1=,ans2=,tree_query(,ai,bi),ans=ans2;
for(ll i=;i<=;i++) if(bit[i]&ans1) ans=(ans*((pi[i]-)*pi_[i]%mod))%mod;
printf("%lld\n",ans);
}
}
return ;
}

AC日记——【清华集训2014】奇数国 uoj 38的更多相关文章

  1. 【数论&线段树】【P4140】[清华集训2015]奇数国

    Description 有一个长为 \(n\) 的序列,保证序列元素不超过 \(10^6\) 且其质因数集是前60个质数集合的子集.初始时全部都是 \(3\),有 \(m\) 次操作,要么要求支持单点 ...

  2. uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题

    [清华集训2014]矩阵变换 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...

  3. UOJ#46. 【清华集训2014】玄学

    传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...

  4. 清华集训2014 sum

    清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...

  5. uoj#38. 【清华集训2014】奇数国【欧拉函数】

     number⋅x+product⋅y=1  有整数x,y解的条件是gcd(number, product) == 1. product用线段树维护一下,然后现学了个欧拉函数. 可以这样假如x = p ...

  6. 【UOJ#38】【清华集训2014】奇数国

    考虑欧拉函数的性质,60很小,压位存下线段树每个节点出现质数. #include<bits/stdc++.h> ; ; typedef long long ll; using namesp ...

  7. uoj#38. 【清华集训2014】奇数国(线段树+数论)

    传送门 不难看出就是要先求区间积,再求这个区间积的\(\varphi\) 因为\(\varphi(x)=x\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\ ...

  8. 清华集训2014 day1 task3 奇数国

    题目 题目看起来好像很难的样子!其实不然,这是最简单的一道题. 算法 首先要注意的是: \(number \cdot x + product \cdot y = 1\) ,那么我们称\(number\ ...

  9. 【BZOJ3813】【清华集训2014】奇数国 线段树 数学

    题目描述 给你一个长度为\(n\)的数列,第\(i\)个数为\(a_i\).每个数的质因子都只有前\(60\)个质数.有\(q\)个询问,每次给你\(l,r\),求\(\varphi(\prod_{i ...

随机推荐

  1. sendto函数的坑

    测试unix数据报套接字时,一个程序收,一个程序发,分别绑定自己的socket.结果在收的部分,返回的发送方的地址总是空的,但是返回的地址长度又是对的. ) { bzero(&clientad ...

  2. JVM(2)——GC算法和收集器

    一.引入 上篇博客<JVM--简介>中主要介绍了JVM的内存模型,思考一下: 为什么要划分堆.栈.方法区等? 为什么把不同种类的数据信息分别存放? 答案可以分为很多很多条,这里就说一个方面 ...

  3. js把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式

    最近在做项目的时候,需要把后台返回的时间转换成几秒前.几分钟前.几小时前.几天前等的格式:后台返回的时间格式为:2015-07-30 09:36:10,需要根据当前的时间与返回的时间进行对比,最后显示 ...

  4. online community

    online community spectrum https://spectrum.chat/xgqfrms https://community.xgqfrms.xyz/ https://spect ...

  5. delphi Edit 控制最大值,只能输入数字型 控制小数位数

    delphi语言受众多程序员追捧,主要原因之一就是它有很多第三方的控件可供使用.很多资深的delphi程序员都把自己积累的函数.过程等设计成控件,以方便使用,提高开发效率. 本文通过一个只允许输入数字 ...

  6. 【C++ troubleshooting】A case about decltype

    template <typename iter_t> bool next_permutation(iter_t beg, iter_t end) { // if (beg == end | ...

  7. 洛谷 P1251 餐巾计划问题

    题目链接 最小费用最大流. 每天拆成两个点,早上和晚上: 晚上可以获得\(r_i\)条脏毛巾,从源点连一条容量为\(r_i\),费用为0的边. 早上要供应\(r_i\)条毛巾,连向汇点一条容量为\(r ...

  8. UDP收/发广播包原理及步骤

    原文链接地址:http://www.2cto.com/net/201311/254834.html UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要 ...

  9. NOIP2017宝藏 [搜索/状压dp]

    NOIP2017 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘 ...

  10. [hdu 4348]区间修改区间查询可持久化线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4348 一开始把lazy标记给push_down了,后来发现这样会让持久化变乱,然后想到不用push_d ...