#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 ;
}

最新文章

  1. PHP-Beast V0.6 发布 (PHP源码加密模块)
  2. atitit.重装系统需要备份的资料总结 o84..
  3. HTML Jquery
  4. [ZZ] D3D中的模板缓存(3)
  5. AFNetworking3.0概述
  6. Java入门到精通——开篇
  7. oracle sql语句跟踪
  8. WebViewJavascriptBridge 原理分析
  9. [DP] LGTB 玩THD (复杂状态DP)
  10. Ubuntu下Django初体验(一)——开发环境搭建
  11. idea mac 快键键
  12. (转)你知道Android也有安全模式吗?(地球人都知道了吧)
  13. 【动态规划】XMU 1029 矩阵链乘法
  14. shell中的环境变量
  15. c标准头文件
  16. mysql命令行导入导出数据库
  17. C# 树状图
  18. js 内置对象参考 (Array,String, Math, Data, Number)
  19. ELFhash
  20. CentOS 7.0 安装配置LAMP服务器方法(Apache+PHP+MariaDB)(转)

热门文章

  1. 【EasyNetQ】- 快速开始
  2. thinkphp3.2 验证码的使用
  3. div加了float后 四个特性
  4. viterbi维特比算法和隐马尔可夫模型(HMM)
  5. ASP.NET页面之间传值Application(5)
  6. G D 3 2 预 处 理 符 号 配 置 中 定 义
  7. [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
  8. BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp
  9. HDU 5670
  10. php SPL四种常用的数据结构