HDU 6706 huntian oy
题意 求以下式子的值,T组数据各个字母满足1 ≤ n , a , b ≤109 ,a,b互质
思路:
卡常毒瘤题,出题人时限卡的非常紧,考场上推出来又T又WA
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e6+10,mod=1e9+7; 5 const int inv2=500000004,inv3=333333336; 6 int phi[maxn],n,ans; 7 8 vector<int> p;bool np[maxn]; 9 map<int,int> Phi; 10 11 void init(){ 12 phi[1]=1; 13 for(int i=2;i<maxn;++i){ 14 if(!np[i]){ 15 p.push_back(i); 16 phi[i]=i-1; 17 } 18 for(int j=0;j<p.size()&&p[j]*i<maxn;++j){ 19 np[i*p[j]]=true; 20 if(i%p[j]==0){ 21 phi[i*p[j]]=phi[i]*p[j]; 22 break; 23 } 24 phi[i*p[j]]=phi[i]*(p[j]-1); 25 } 26 } 27 for(int i=1;i<maxn;++i) 28 phi[i]=(1ll*phi[i]*i%mod+phi[i-1])%mod; 29 } 30 int read(){ 31 int x=0;char c=getchar(); 32 for(;!isdigit(c);c=getchar()); 33 for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48); 34 return x; 35 } 36 void Write(int x){ 37 if(x<=0)return; 38 Write(x/10);putchar(x%10+'0'); 39 } 40 void write(int x){ 41 if(x==0)putchar('0'); 42 else Write(x); 43 } 44 int Sum2(int n){ 45 int ret=n; 46 ret=(ll)ret*inv2%mod; 47 ret=(ll)ret*(n+1)%mod; 48 return ret; 49 } 50 int Sum3(int n){ 51 int ret=Sum2(n),tmp=(2ll*n+1)%mod; 52 ret=(ll)ret*inv3%mod; 53 ret=(ll)ret*tmp%mod; 54 return ret; 55 } 56 int phii(int n){ 57 if(n<maxn)return phi[n]; 58 if(Phi.count(n))return Phi[n]; 59 int ret=Sum3(n); 60 for(int i=2,r,tmp;i<=n;i=r+1){ 61 r=min(n,n/(n/i)); 62 tmp=(ll)phii(n/i)*(Sum2(r)-Sum2(i-1))%mod; 63 ret-=tmp; 64 if(ret<0)ret+=mod; 65 if(ret>=mod)ret-=mod; 66 } 67 return Phi[n]=ret; 68 } 69 void solve(){ 70 n=read();read();read(); 71 Phi.clear(); 72 ans=(phii(n)-1+mod)%mod; 73 ans=(ll)inv2*ans%mod; 74 write(ans);puts(""); 75 } 76 int main(){ 77 init(); 78 int T;scanf("%d",&T); 79 for(;T--;)solve(); 80 return 0; 81 }
转载于:https://www.cnblogs.com/ndqzhang1111/p/11402780.html
HDU 6706 huntian oy相关推荐
- HDU 6706 huntian oy (欧拉函数 + 杜教筛)
huntian oy 推式子 ∑i=1n∑j=1igcd(ia−ja,ib−jb)(gcd(i,j)==1)=∑i=1n∑j=1i(i−j)(gcd(i,j)==1)=∑i=1ni∑j=1i(gcd( ...
- hdu 6706 huntian oy 杜教筛
传送门 思路: 打表发现 题意可转换成 (a,b互质) 求 与他互质的和为,因为i对应n−i 杜教筛看这里
- 2019年CCPC - 网络赛E:huntian oy【杜教筛】
题目: HDU---6706:huntian oy 题意: 给定N,a,b,求下面式子的值(求和后再mod 1e9+7): 分析: 一直怯于杜教筛不敢去学习[一看就会的杜教筛],今天终于迈出了这一步, ...
- huntian oy (数论卷积杜教筛)
huntian oy (数论&卷积&杜教筛) 思路: f(n,a,b)=∑i=1n∑j=1igcd(ia−ja,ib−jb)[gcd(i,j)=1](mod109+7)f(n,a,b) ...
- 2019CCPC网络预选赛 八道签到题题解
目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian o ...
- 知识点 - 数论函数导论
知识点 - 数论进阶 abstract:整除分块,积性函数,线性筛,莫比乌斯反演,迪利克雷卷积,积性函数前缀和,杜教筛,阁洲筛,min_25筛 0.引入 Gym - 101485D debugging ...
- 2019CCPC网络赛部分题解
这场锅最大的应该是我吧...一个半小时的时候我已经写完了08的正解,然而突发奇想也没造数据就把自己叉了,然后带着学弟想了俩小时这道傻逼题... 三道签到题我都没看题,学弟一个人写的:wtw不在学校,抽 ...
- element-ui 网格_UI备忘单:列表与网格
element-ui 网格 重点 (Top highlight) Grids or lists? That is the question we will look at in this cheat ...
- figma下载_在Figma中将约束与布局网格一起使用
figma下载 While doing research for the book "Designing in Figma", I discovered a powerful wa ...
最新文章
- WCF学习之旅—WCF第二个示例(七)
- cwntos新建目录挂载磁盘_centos挂载磁盘及扩展根目录
- case when用法java_Oracle CASE WHEN 用法介绍
- 利用rsync如何同步单个文件
- 计算机管理员无法创建密码,找到电脑管理员的密码
- Java文档阅读笔记-C3P0连接池的使用
- WebApi接口访问异常问题。尝试创建“testController”类型的控制器时出错。请确保控制器具有无参数公共构造函数
- Python io – BytesIO,StringIO
- 【洛谷3368】树状数组模版题(区间修改,单点查询)
- Instant Run(App加壳)
- 817c语言程序设计,全国名校C语言程序设计考研真题汇编
- 使用iToolab UnlockGo 删除iPhone/iPad上的各种锁
- 使用itext和freemarker来根据Html模板生成PDF文件,加水印、印章
- 【ROM制作工具】如何三分钟学会制作手机线刷包?一键制作线刷包详细教程
- 什么是反射 反射怎么用
- java去除word修改痕迹_去除Word修订
- Python图像库PIL的类Image的paste写法
- 「手把手教你」用Python量化海龟交易法则
- 《拳皇15》先导预告 多位角色回归、细节下月公开
- Spinner ArrayAdapter
热门文章
- 设计模式(六)J2EE 模式
- 【机器学习】 - 使用dlib进行人脸定位,人脸检测,给人脸图片戴口罩
- 【数据库实验课堂】实验三:管理SQL Server表数据
- 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)
- 【POJ - 2752】Seek the Name, Seek the Fame (KMP,公共前缀后缀长度及个数)
- linux虚拟机上安装域名,虚拟机如何安装linux系统
- html 如何改变图片形状,图形变换的三种方式是什么?
- mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
- idea springboot一直卡在启动 没有日志输出
- java递归遍历删除文件