
数论
文章平均质量分 71
韩小侠
这个作者很懒,什么都没留下…
展开
-
HDU 4099 字典树+高精度
题意:给出某项斐波那契数的前几位,让输出最小的一项前缀为这个串的项数。先高精度算出前100000项斐波那契的前50位。并把前40位存进字典树预处理一下。字典树节点值存为第几项。然后输入字符串直接查找。#include #include#include#includeusing namespace std;#define N 50int fib[3][N+1];class tr原创 2013-07-19 15:22:21 · 1010 阅读 · 0 评论 -
HDU 1402 快速傅里叶变换FFT
题意:给出两个大数求和。看了算法导论(第2版)第30章的《多项式与快速傅里叶变换》多项式有系数表示法和点值表示法。两个次数界为n的多项式A(x)和B(x)相乘,输入输出均采用系数表示法。(假定n为2的幂)1)使次数界增加一倍:A(x)和B(x)扩充为次数界为2n的多项式,并构造起系数表示2)求值:两次应用2n阶FFT,计算出A(x)和B(x)的长度为2n原创 2013-07-25 16:49:50 · 1233 阅读 · 0 评论 -
POJ 3090 欧拉函数递推
题意:为多少个点与原点连线不经过其他点。首先ans[1]=3,不经过其他点也就是(x,y)点的gcd(x,y)=1,也就是x,y,互素。所以就是每一行上的个数为phi(n)*2因为行和列都算上就是两倍关系。#include #include#include#includeusing namespace std;#define maxn 1000008long long phi[原创 2013-07-28 11:07:48 · 969 阅读 · 0 评论 -
POJ 2478 法雷级数
题意:给出法雷级数定义F2 = {1/2} F3 = {1/3, 1/2, 2/3} F4 = {1/4, 1/3, 1/2, 2/3, 3/4} F5 = {1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5} 求f[n]组法雷级数分数的个数。不难发现就是欧拉函数前n项的和。运用递推求欧拉函数即可。再发个快的,留着比赛做模板。#i原创 2013-07-28 10:41:02 · 797 阅读 · 0 评论 -
欧拉函数性质
先来介绍几个与欧拉函数有关的定理:定理一:设m与n是互素的正整数,那么定理二:当n为奇数时,有。因为2n是偶数,偶数与偶数一定不互素,所以只考虑2n与小于它的奇数互素的情况,则恰好就等于n的欧拉函数值。定理三:设p是素数,a是一个正整数,那么关于这个定理的证明用到容斥:由于表示小于与互素数的正整数个数,所以用减去与原创 2013-08-03 14:47:23 · 3121 阅读 · 0 评论 -
数论中的定理
定理一:素数定理:定理二:设a>1,m,n>0,则HDU2685就用到上述定理。定理三:设a>b,(a,b)=1,则定理四:设,那么G的值为:n为素数:本身n有多个素因子:1n只有一个素因子:该因子应用题目:HDU258原创 2013-08-03 14:45:22 · 861 阅读 · 0 评论 -
POJ 1183 数学推导
题意:给出arc(tan(1/a))=arc(tan(1/b))+arc(tan(1/c)) 求b+c的最小值。根据公式 tan(a+b)=(tan(a)+tan(b))/(1-tan(a)*tan(b)) 可以把上式化简为a=(b*c-1)/(b+c)补充一句:为什么不在区间(2a,+oo),因为有一端不确定,同样的y可能在这个区间会距离2a非常远,所以超时。#include原创 2013-07-27 12:48:19 · 868 阅读 · 0 评论 -
HDU 3988 大数分解
题意: 这题把k素因子分解后看n!中有多少个与k对应的素因子。n!中含有素因子p的个数为n/p+n/p^2.....取整。#include #include#include#includeusing namespace std;typedef unsigned long long ll;const unsigned long long oo=92233720368原创 2013-08-03 10:45:21 · 903 阅读 · 0 评论 -
HDU 4609 快速傅里叶变换
题意:给出10^5个边长,问任取三个组成三角形的概率。这题没遇到还不知道什么是傅里叶变换FFT,当时怎么想时间复杂度都不能降到n*log(n)。实际是这样的,把每个记录长度个数的数组存在num数组中。直接摘大神的吧 网址http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html学会了FFT。这题就很容易了。原创 2013-07-25 20:17:00 · 1393 阅读 · 1 评论 -
HDU 3123 大数阶乘取模
题意:Output the answer of (0! + 1! + 2! + 3! + 4! + ... + n!)%m.这题想难了,暴力就行的东西我竟然素因子分解那么做了,这么做素数的时候比暴力慢,不是素数的时候我也不知道快不快。。#include #include#include#includeusing namespace std;#define maxn 1100bo原创 2013-08-02 13:51:53 · 2308 阅读 · 0 评论 -
POJ 2427 pell方程
题意:求解x^2-n*y^2=1的最小正整数解。java大数模板。import java.math.BigInteger; import java.util.Scanner; public class NOD1005{ public static void solve(int n) { BigInteger N, p1, p2, q1,原创 2013-07-30 18:31:21 · 805 阅读 · 0 评论 -
HDU 2281 pell方程
题意:给出N找出最大的n满足n#include #include#include#includeusing namespace std;const int MAX=2;const long long oo=1e18;typedef struct{ long long m[MAX][MAX];} Matrix;Matrix I= {1,0,原创 2013-07-31 11:44:27 · 808 阅读 · 0 评论 -
HDU 3292 pell方程
题意:求x^2+n*y^2=1 按x排序第k大的解。题目就是求佩尔方程,用矩阵连乘的方法,当n为完全平方数的时候无解。如果我们求出Pell方程的最小正整数解后,就可以根据递推式求出所有的解。则根据上式我们可以构造矩阵,然后就可以快速幂了。这样就可以求出第k大的解。HDU329原创 2013-07-30 11:36:14 · 1065 阅读 · 0 评论 -
NOD 1147 还原连分数
题意:给出非完全平方数,问你第k项连分数还原后的分数,对1e9+7取余。对于连分数,我们可以表示为:对于无理数,ai一定是无穷数列,反之,对于有理数,ai一定是有穷数列。对于上式中的p与q,有递推式:而对于sqrt(n)来说,ai中的首项为一个单独的整数,除了它后面的都会循环。对于这个问原创 2013-07-29 19:07:44 · 906 阅读 · 0 评论 -
HDU 3823 暴力枚举
题意:给出A,B, 找出一个最小的m,使A+m,B+m为连续的两个素数。枚举2000W以内的素数暴力找。#include #include#include#includeusing namespace std;#define maxn 21000000bool isprime[maxn];long long prime[maxn],nprime;void getprime(原创 2013-07-21 13:22:54 · 1469 阅读 · 1 评论 -
HDU 4344 大数分解
题意:给出一条长n的绳子,则有很多长为L的均分方法,找出一个L的集合,集合内元素两两不互素,并且要求元素最多,然后求和。很容易看出来,有多少个素因子就有多少个元素,再把求出次幂求和就行,我的模板超时。。网上找了模板。#include #include #include #include using namespace std;typedef __int64 ll;ll gcd(原创 2013-07-02 10:09:59 · 959 阅读 · 0 评论 -
HDU 3939 毕达哥拉斯三元组
题意:求形成直角三角形切个边长小于L的个数,并且三边两两互素。也就是求前L本原毕达哥拉斯三元组解的个数。令,其中m>n,。由上式得z为直角三角形斜边且z#include #include#include#include#includeusing namespace std;#define maxn 1000008bool isprime[maxn];int pr原创 2013-07-29 13:03:35 · 1632 阅读 · 0 评论 -
HDU 4392 反素数java
网上找的模板能求10^80次方以内的。import java.io.BufferedInputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; im原创 2013-08-04 10:19:18 · 881 阅读 · 0 评论 -
扩展欧几里得求两多项式最大公因式
#include #include #include #include using namespace std;typedef long long LL;const double eps = 1e-8;const int MOD = 999983;const int N = 55;struct Poly{ int n; LL a[N];};Poly p原创 2013-10-14 13:01:35 · 2720 阅读 · 0 评论 -
URAL 1456 求a模n的阶
首要条件是a,n互素,也就是求a^x=1(n)最小的x,根据欧拉函数可知最大为n的欧拉函数值。所以n的欧拉函数值的因子就可以了。#include #include#include#include#include#include#includeusing namespace std;#define ll long longll gcd(ll a,ll b){ re原创 2013-10-06 19:39:51 · 1694 阅读 · 0 评论 -
URAL 1698 自守数
好吧 苟哥总结好了我直接粘了自守数的定义 对于一个k位的自然数n,如果它的平方后的最后k位跟原数相同,那么n就叫做自守数。数学定义表达式为:。 一位数的自守数有三个,分别为1,5,6。两位数以上的自守数分为A、B两类,A类是以5结尾,B类是以6结尾。例如,以5结尾的自守数有25,625,90625等;以6结尾的自守数有76、376、9376等。原创 2013-10-06 19:47:36 · 1059 阅读 · 0 评论 -
将一个数分解成多个素数和的方法数
题目描述:哥德巴赫猜想认为任一大于2的偶数,都可表示成两个素数之和,比如6 = 2+2+26 = 3+310 = 2+2+2+2+210 = 2+2+3+310 = 2+3+510 = 3+7像3+7与7+3只有顺序不一样的认为是一种方式问:给定一个10000以内的偶数,将它表示为素数的和有几种方式?(结果对10^9+7取模)原创 2013-10-05 13:23:54 · 14464 阅读 · 0 评论 -
URAL 1356 哥德巴赫猜想
题意:给出一个数,把它分解成几个素数相加的形式,要求分解出的素数的数量最小。这题分情况讨论就可以了,首先需要知道哥德巴赫猜想即一个大于4的偶数可以分解成两个素数和的形式。其次需要知道奇数加奇数等于偶数,奇数减奇数等于偶数。那么首先判断n是否是素数,如果是直接输出n就可以。接下来判断如果n是奇数,那么先判断n-2是否是素数,如果是的话那么最小数量的素数和即n-2 与 2,如果不是那么肯定原创 2013-10-04 15:26:08 · 870 阅读 · 0 评论 -
求分解后x的最小公倍数
import java.math.BigInteger;import java.util.*;public class Hello{ static final int N = 1005; static boolean prime[] = new boolean[N]; static int p[] = new int[N]; static BigInteger dp[][]原创 2013-10-03 19:07:23 · 727 阅读 · 0 评论 -
timus 1268 原根
题意:求K个素数pi对应的ni。ni满足:ni,ni^2,ni^3,...,ni^m对pi取模各不相同(i=1,2,3,...),且m最大,ni最大。理论基础: 原根的定义:首先,对于互质的两个整数a,m。必然存在:d 原根性质定理:如果a为m的原根,记它的阶为ord,那么:a,a^2,a^3,...,a^ord对m取模的值各不相同。 定理1:对于整数a原创 2013-10-03 15:19:18 · 1021 阅读 · 0 评论 -
URAL 1204 中国剩余定理
题意:给出一个n n为两个素数的乘积,让求满足方程 x*x=x ( mod n ) 且x给上面等式变形有x*(x-1)=0 ( mod p*q ) 则有 x = 0 ( mod p) x = 1 ( mod q ) 或者 x = 1( mod p) x = 0 ( mod q ),由于p,q,互素,所以可以用中国剩余定理求出最小的正整数解。 #include #include#in原创 2013-10-03 10:29:03 · 1278 阅读 · 0 评论 -
URAL 1141 计算模n的e次根
给出 n=p*q p,q为素数 gcd(e, (p-1)*(q-1)) = 1, e me = c (mod n)。摘自《数论概论》#include #include#include#include#include#include#includeusing namespace std;#define maxn 32050typedef long l原创 2013-10-02 15:58:33 · 1084 阅读 · 0 评论 -
URAL 1132 二次剩余
1132. Square RootTime limit: 1.0 secondMemory limit: 64 MBThe number x is called a square root of a modulo n (root(a,n)) if x*x = a (mod n). Write the program to find the square root o原创 2013-10-02 11:51:24 · 925 阅读 · 0 评论 -
HDU 3977 求斐波那契循环节
题意:求斐波那契数列模一个数的循环节的长度。分析过程:首先我们知道fib数列模p如果出现了连续的1,0就意味这着开始循环了,因为接下来的项就是1 1 2 3 5等等。那么很显然如果在第k位第一次出现了1,0,那么对于以后的1,0都可以表示为k*m。 那么,现在我们考虑如果fib数列模p在第pos位第一次出现了0,那么设0前面的那个数为a,则接下来的序列将是a,0原创 2013-09-03 20:04:34 · 2123 阅读 · 0 评论 -
HDU 3978 斐波那契循环节
题意:给出f(f(f...f(n)...)) 总共嵌套k次。问最后模p的值是多少。首先应该明白的是这个题有循环节的。一个数模N的循环节就是这个数分解成素因子乘积的形式p1^a1*p2^a2*p3^a3...后,斐波那契模pi^ai的循环节的最大公约数。那么一个素数的k次幂的循环节=斐波那契模上这个素数的循环节乘上p^(k-1)。而一个素数p的循环节 如果p>5并且是5的二次剩余,那么循原创 2013-09-08 13:54:07 · 1138 阅读 · 0 评论 -
POJ 1845 二分+素因子分解
题意:求a^b的因子的和。对a进行素因子分解a=p1^k1*p2^k2*...*pn^kn则根据成型函数的性质有s=(1+p1+p1^2+p1^3...p1^(k1*b))*....()等比数列直接二分求前n项和即可。#include #include#include#includeusing namespace std;#define maxn 30000bool isp原创 2013-08-15 19:22:39 · 744 阅读 · 0 评论 -
NOD 1171 x^2+y^2=N
1171 . 两个数的平方和 V2时间限制:1 秒 空间限制:65536 KB 分值: 1280给出一个整数N,将N表示为2个整数i j的平方和(i 例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)Input一个数N(1 Output共K行:每行2个数,i j,表示N = i原创 2013-08-23 11:17:36 · 2216 阅读 · 1 评论 -
NEFU 461 递推式转通项公式
网址:http://acm.nefu.edu.cn/test/problemshow.php#include #include#include#include#includeusing namespace std;int main(){ double a,b,u,v; int n; while(~scanf("%d%lf%lf%lf%lf",&n,&原创 2013-08-05 18:09:48 · 1480 阅读 · 0 评论 -
HDU4291 循环节+矩阵连乘2012 ACM/ICPC Asia Regional Chengdu Online1004
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)原创 2012-09-17 19:25:21 · 1178 阅读 · 0 评论 -
POJ 3233 矩阵连乘+二分
这题2829MS险过。。应该会有更好的方法 首先矩阵连乘这没说的 重要的是在于二分 有公式 k为奇数时 s(k)=a+(a+a^(k/2+1))*s(k/2)k为偶数时 s(k)=(1+a^(k/2))*s(k/2) 例如s(7)=a+(a+a^4)*s(3) s(6)=(1+a^3)*s(3) 有了二分的方法这题明显思路就清楚了#include#include#include原创 2013-01-19 09:58:58 · 522 阅读 · 0 评论 -
HDU 4569 长沙E题 枚举
题意:给你函数 f(x) = anxn +...+ a1x +a0最多N就4位,输入任意一个x使f(x)%(prime*prime)=0。这题枚举就可以,首先如果满足f(x)%(prime*prime)=0必须要满足f(x)%prime=0这个条件。那么应该先找到一个x满足f(x)%prime=0,然后在(x-prime*prime)区间内x+=prime(保证f(x)%prime=0原创 2013-06-18 14:10:13 · 1120 阅读 · 0 评论 -
HDU3579 一元线性同余方程
这题是典型的同余方程组X=Ai(mod Mi)求解问题 需要注意要求输出最小正整数解 如果同余方程组的解是0 那么应该输出Mi的最小公倍数#include #include#includeusing namespace std;void exgcd(long long a,long long b,long long &d,long long &x,long long &y){原创 2013-01-10 17:58:00 · 653 阅读 · 0 评论 -
HDU1573 一元线性同余方程组
这题很水啊 就是求解一元线性方程组的解 然后问在n的范围内解的个数 很正常的一道题竟然在输入上 WA了无数次 这个就有点惨了 这个同余方程的解是按照最小公倍数的往上循环的 然后再注意一下求出的解为0的边界问题就可以了#include #include#includeusing namespace std;void exgcd(long long a,long long b,lo原创 2013-01-10 17:34:35 · 783 阅读 · 0 评论 -
POJ 2891 解一元线性同余方程组
这题不是中国剩余定理 因为a1 a2..ak不互素 所以这是一道解一元线性同余方程组的题 把两个等式化成一个一元线性同余方程 迭代一下得出结果#include #include#includeusing namespace std;void exgcd(long long a,long long b,long long &d,long long &x,long long &y){原创 2013-01-10 15:33:12 · 1058 阅读 · 0 评论 -
POJ1006 中国剩余定理
这题用到了中国剩余定理 即有方程 x=p(mod 23) x=e(mod 28) x=i(mod 33) 运用中国剩余定理求xx-d即为答案 注意边界就可以了#include #include#includeusing namespace std;void exgcd(long long a,long long b,long long &d,long long &x,long原创 2013-01-09 11:06:27 · 457 阅读 · 0 评论