--------欧拉定理/欧拉函数
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj1164求和
若两个数的最大公约数为1,则这两个数互质。现在给出一个正整数N(1 是不是很像欧拉函数呢 没错,我们发现,对于i,若有gcd(i,n)=1则必有gcd(n-i,n)=1,所以互质的数是成对出现的! 正好,φ(N)也必然是一个偶数 所以answer=N*φ(N)/2 求φ(N)可以用sqrt(N)的方法,这里不多讲 #include int N,M,K; int main(){ s原创 2017-09-19 19:43:05 · 460 阅读 · 0 评论 -
Jzoj2581 最大公约数
sum:=0; for i:=1 to n-1 do for j:=i+1 to n do sum:=sum+gcd(i,j) 显然这个程序的效率是很低的,小明打算写一个更强的程序,在求出sum的同时比妹妹跑的更快。 我们令A[i]为Σgcd(i,j)(j∈[1,i]) 那么很显然的,gcd(i,j)为i的因数,而当gcd(i,j)=1时,原创 2017-09-20 20:40:27 · 440 阅读 · 0 评论 -
Jzoj2756 Longge的问题
做法可以参考这篇:jzoj2581,注意求phi(i)的方法,需要用到sqrt(i)的暴力分解算法 #include bool vis[40010]; int w[20010],t=0; long long phi(int x){ long long S=x; for(int i=0;w[i]*w[i]<=x;++i){ if(x%w[i]==0) for(S=S/w[i]*(w[原创 2017-09-20 20:45:35 · 243 阅读 · 0 评论 -
Jzoj3927 可见点数
ZPS经过长期的努力争取,终于成为了0901班的领操员,他要带领0901班参加广播操比赛。现在0901班的队伍可以看作是一个n*n的点阵,每个人都站在格点上。现在作为领操员的ZPS站(0,0)点,他想知道如果0901班的队伍站齐了,他能看到多少个人的脸(假设每个人的身高相同,体积相同) 这个题很容易发现,若一个点(x,y)可以被看到,那么gcd(x,y)=1,否则一定会被(x/gcd,y/gcd原创 2017-10-04 11:19:15 · 435 阅读 · 0 评论 -
Jzoj4732 函数
有这么一个函数满足Σf(d)=n (d|n),给出序列a,求Σf(a[i]) 首先,大部分人一眼就能看出这个f就是phi吧 那么考虑怎么求 有 phi(p)=p-1(p为质数) phi(ab)=phi(a)phi(b)(gcd(a,b)=1) phi(ka)=kphi(a)(k|a且k为质数) 那么我们就可以类似于素数筛法的来计算phi了 (这道题有三个点是题答题,还有一个点数据错原创 2017-10-21 21:45:35 · 351 阅读 · 0 评论 -
一些基础算法的模板(持续更新)
更新中 //Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft //To be continued... //Suffix Automation char str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin原创 2017-10-25 22:05:58 · 3750 阅读 · 0 评论 -
(各种)FFT模板
先来一个标准的归并版FFT 2881ms #include #include #include #include #define D double using namespace std; struct Z{ D x,y; } a[280010],b[280010],z[280010]; inline Z operator+ (Z x,Z y){ return (Z){x.x+y.x,x.y原创 2018-01-23 11:31:05 · 267 阅读 · 0 评论 -
Jzoj5636 Power
近期没有写过博客感觉要死了->重返jz深造一道区间查询的问题,因为模数不是质数,我们考虑利用指数循环节这个东西:x^k=x^(k%phi(M)+phi(M))%M 这里要求k>=phi(M)那么可以写成Ans[l,r]%M=x^(Ans[l+1,r]%phi(M))%M由于phi的迭代会在logn次收敛为1,所以我们可以直接递归来做先用线性筛筛出10^7以内的phi值,大过这个的就分解...原创 2018-04-17 19:59:10 · 269 阅读 · 0 评论 -
51Nod1037 最长的循环节 V2
题目看这里 小学奥数题目23333 首先我们知道,0.0˙0...001˙=1/99..90.0˙0...001˙=1/99..90.\dot00...00\dot{1}=1/99..9 那么任意一个循环小数都可以写成以10k−110k−110^k-1为分母的分数 让后稍加分析就知道,满足条件的最小的k就是循环节的长度 那么题目就变成了求一个数s,使得满足10k=1 ...原创 2018-07-28 23:17:17 · 403 阅读 · 0 评论