题意: 给出N和M,统计区间x ∈ [2, N!],x满足所有素因子都大于M的x的个数. 分析: 首先将问题转化一下,所有素因子都大于M 等价于 这个数与M!互素 对于k大于M!,k与M!互素等价于 k % M! 与 M!互素 所以我们可以求出φ(M!)(φ为欧拉函数) 然后乘以N! / M!,最后答案再减一(因为是从2开始统计的) 欧拉函数的公式为a phifac[n] = φ(n!),我们递推求phifac 当n为合数时,n!和(n-1)!的素因数的集合是一样的,所以phifac[n] =…
题意: 求sum{gcd(i, j) | 1 ≤ i < j ≤ n} 分析: 有这样一个很有用的结论:gcd(x, n) = i的充要条件是gcd(x/i, n/i) = 1,因此满足条件的x有phi(n/i)个,其中Phi为欧拉函数. 所以枚举i和i的倍数n,累加i * phi(n/i)即可. #include <cstdio> typedef long long LL; ; ]; LL f[maxn + ]; void phi_table() { phi[] = ; ; i <…
发现自己搜索真的很弱,也许做题太少了吧.代码大部分是参考别人的,=_=|| 题意: 给出一个phi(n),求最小的n 分析: 回顾一下欧拉函数的公式:,注意这里的Pi是互不相同的素数,所以后面搜索的时候要进行标记. 先找出所有的素数p,满足(p - 1)整除题目中所给的phi(n) 然后暴搜.. 素数打表打到1e4就够了,如果最后剩下一个大素数单独进行判断. #include <cstdio> #include <cmath> #include <cstring> #i…
这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> using namespace std; ;//最大范围 int phi[maxx]; void phi_table(){ ;i<=maxx;i++)phi[i]=; phi…
题意:给你一个数N,求N以内和N的最大公约数的和 解题思路: 一开始直接想暴力做,4000000的数据量肯定超时.之后学习了一些新的操作. 题目中所要我们求的是N内gcd之和,设s[n]=s[n-1]+gcd(1,n)+gcd(2,n)+gcd(3,n)+gcd(4,n)....... 再设f[n]=gcd(1,n)+gcd(2,n)+gcd(3,n)+gcd(4,n).......; 思考一下,假设gcd(x,n)=ans,ans便是x和n的最大公约数,那么有几个ans我们将某ans的个数su…
题意: 给一个数 N ,求 N 范围内所有任意两个数的最大公约数的和. 思路: f 数组存的是第 n 项的 1~n-1 与 n 的gcd的和,sum数组存的是 f 数组的前缀和. sum[n]=f[1]+f[2]+f[3]+-+f[n] sum[n-1]=f[1]+f[2]+-+f[n-1] sum[n]=sum[n-1]+f[n] 所以我们求出f[n]的值即可 1~n-1与 n 的最大公约数暴力来求肯定超时: 设gcd(x,n)=i 表示 n 和 x 的最大公约数为i,那么gcd( x/i ,…
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1959  Solved: 1229[Submit][Status][Discuss] Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一个整数,为N. Output 一个整数,为所求的答案. Sample Inp…
中国剩余定理 ——!x^n+y^n=z^n 想必大家都听过同余方程这种玩意,但是可能对于中国剩余定理有诸多不解,作为一个MOer&OIer,在此具体说明. 对于同余方程: x≡c1(mod m1) x≡c2(mod m2) ··· x≡cn (mod mn) [其中任意的两个mi,mj互质] 我们可以构造出一个解: 令m=Πai[0<i<=n],Mi*mi=m. 那我们可以得到一组解: x=ΣMi*Mi-1(mod m) 接下来我们想办法证明她是唯一的: Mi*Mi-1≡1(mod m…
这里用到了一些数论知识 首先素因子都大于M等价与M! 互质 然后又因为当k与M!互质且k>M!时当且仅当k mod M! 与M!互质(欧几里得算法的原理) 又因为N>=M, 所以N!为M!的倍数 所以只要求1到M!中与M!互质的数的个数,在乘上N!/M! 可以理解为每一块M!有这么多,然而N!中有很多块M!,所以乘上N!/M! 然后根据phifac[n] = phi[n!] = n!(1-1/p1)(1-1/p2)......(1-1/k)的定义可以得出 当n为质数的时候 phifac[n]…
这道题很巧妙,要把式子变一下 phi(n) = n * (1 - 1 / p1) * (1 - 1 / p2)--(1 - 1 / pr) = n * ((p1-1) / p1) * ((p1-2) / p2)  --((pr-2) / pr) = p1^k1 * p2^k2--pr^kr    * ((p1-1) / p1) * ((p1-2) / p2)  --((pr-2) / pr) = p1^(k1-1) * (p1-1) * p2^(k2-1) * (p2-1)--pr^(kr-1)…