![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数学----初等数论
文章平均质量分 70
muximuxi525
有些事情暂时可以放下但是绝不能放弃
展开
-
POJ1845 Sumdiv
题目大意:就是求S(A^B)%9901,S函数表示A^B的因子和。其实一开始我想到杭电的1452的happy 2004.就是用逆元的做法,后来跪了~~因为P-1不一定和9901互质啊~~所以求逆元的定理要求不满足,所以在这种情况下不能用逆元的做法来做。只能用等比数列的二分法来做。首先是求出A的素因子:P1^k1 * P2^k2 * P3^k3 * P4^k4 *…… *原创 2012-09-27 16:16:49 · 705 阅读 · 0 评论 -
POJ2478 Farey Sequence
题目大意:求1~n区间欧拉函数的个数。思路:直接欧拉函数的递推式的模板撸过~~做了这道题~~从此不再相信C++编译器了~~尼玛坑爹啊~~这道题~~C++RE,G++轻松撸过~~关于欧拉函数的递推关系:假设素数p能整除n,那么如果p还能整除n / p, PHI(n) = PHI(n / p) * p;如果p不能整除n / p, PHI(n) = PHI(n / p) * (p -原创 2012-09-28 17:26:52 · 867 阅读 · 0 评论 -
《数论》3.6习题3------求一元线性同余方程所有解(不是方程组)基础练习例子&&求逆元
且当做模板:program:#include#include#include#include#includeusing namespace std;//求6789783*x≡2474010 (mod28927591)的所有解//即是:ax≡b(mod m)的所有解int ans[1000000];void exgcd(int a,int b,int &d,int &x原创 2012-09-26 12:02:27 · 1598 阅读 · 0 评论 -
欧拉函数 模板题 POJ2407 Relatives
题目大意&&思路:φ(n)是积性函数,所以n=P1^k1*……*Pn^kN(素数因子分解)所以:φ(n)=φ(P1^k1)*……*φ(Pn^kN)而对于φ(P1^k1),原式等于:P1^k-P1^(k-1),即是(P1-1)*P1^(k-1);在此题目中,因子的次数不会大于31,所以直接POW函数就可以解决问题 AC program: #include #include原创 2012-09-27 17:55:08 · 831 阅读 · 0 评论 -
POJ3641 Pseudoprime numbers
题目大意:就是如果P不是素数,能否满足ap =a (modp)思路:直接素数判断+快速幂取模即可,我开始用的是普通素数判断,后来用了miller_rabin改进版的的素数测试,权当模板吧 AC program:(普通素数判断+快速幂)#include#include#include#include#includeusing namespace std;int p,a原创 2012-10-11 12:08:47 · 792 阅读 · 0 评论 -
POJ 2992 Divisors
题目大意:找出排列数的因子的个数思路:排列数通过阶乘求得,所以也就是求阶乘的因子的个数,而因子的个数就是等于:(p1的次方+1)*(p2的次方+1)*(p3的次方+1)……在这里,pi是素数因子,之所以是加1就是当次方为0的时候也要考虑进去,还有这是求n的因子数,那么就是素数因子组合成n的各种组合,所以就要用到乘法定理,把这几个"步骤"“连起来”!问题就转化到怎样求阶乘的所包含的素因子的相原创 2012-08-31 21:35:56 · 593 阅读 · 0 评论 -
POJ2769 Reduced ID Numbers
题目大意:就是求出最小的m使得n个数对m取余的结果都是不同的思路:枚举!枚举!暴力暴力!坑嗲啊,做得想哭了,尼玛的就只是memset了100W的数就TIE了,尼玛的以后memset哥不用了,靠~~不过后来头脑清醒了回来,memset的数必定是不会那么大的。只是我的随意一开,就无限TIE道哭~~呜呜~~。以后不能那么大方了~~大方死人的额~~program: #include#i原创 2012-09-15 20:14:16 · 663 阅读 · 0 评论 -
POJ2635 The Embarrassed Cryptographer (同余)
题目大意:给出一个大数K思路:大数取余。为了避免TIE使用了1000进制。因为只是一次运算所以不必逆置数组。说实在的,10进制想不通为什么会TIE啊~~囧~~求大牛指教啊~~现在的计算机1s不是已经能处理10^8的执行次数了吗?10进制一个100W的素数就只是n*logn的算法就只是2*10^7次执行次数嘛~~下面的枚举素数的时候,n*m的算法嘛~~100w内的素数个数只有78498个嘛~~就原创 2012-09-19 17:08:36 · 1036 阅读 · 0 评论 -
POJ2891 Strange Way to Express Integers
题目大意&&思路:m≡r1+a1*y1 m≡r2+a2*y2 ……m≡ri+ai*yiai之间不互素,所以不是中国剩余定理,而是线性同余方程,直接模板。AC program: #include#include#include#include#includeusing namespace std;typedef __int64 LL原创 2012-09-23 10:42:03 · 733 阅读 · 0 评论 -
POJ1006 Biorhythms
题目大意:求出三个生理期的共同日思路:即是X%23=0(从第零天开始的)X%28=0X%33=0但是又因为:p%23=0,e%28=0,i%33=0;所以X=p+23*y1 (yi是整数)X=e+28*y2X=i+33*y3 所以X和p同余于23,X和e同余于28,X和i同余于33;又因为23、28、33互质;所以用处理 符合定理使用条件原创 2012-09-26 09:25:42 · 747 阅读 · 0 评论 -
POJ2042 Lagrange's Four-Square Theorem
题目大意:拉格朗日定理:每个自然数均可以表示成4个正整数的平方数之和。下面这一句,不知所云:3个平方数之和不能表示形式如4^k(8n+ 7)的数。 如果在一个正整数的因数分解式中,没有一个数有形式如4k+3的质数次方,该正整数可以表示成两个平方数之和。 思路:暴力枚举,但是不必为每个n来验证,而是让四个数滚动起来,只要小于2^15的就可以保存并在此基础上统计个数,然后打个表~~撸过~~原创 2012-09-28 11:11:49 · 1474 阅读 · 0 评论 -
POJ1284 Primitive Roots
题目大意:原根模板题&&欧拉函数模板题,求出模P的原根;思路:首先根据定理:模m有原根的充要条件:m=1,2,4,p^n,2p^n,其中p是奇素数。如果模m有原根的话,原根的个数是:φ(φ(m))在此题,p直接给出是奇素数,那就简单了直接:φ(p-1)撸过去~~就转化成欧拉函数的模板题了 附上理论(来自百度百科): 原根的定义 原根Primitive Root。原创 2012-09-27 21:59:06 · 1054 阅读 · 0 评论 -
POJ1995 Raising Modulo Numbers
题目大意&&思路:快速幂取模,没看题RE了2次,因为指数为0的情况,囧。。还是用自己的模板,虽然有点繁琐,但是自己的更顺眼嘛~~~AC program:#include#include#include#includeusing namespace std;__int64 test,mod,n;__int64 a[50000],k[50000]; __int64 fn(__in原创 2012-10-18 10:53:52 · 672 阅读 · 0 评论 -
nefu 84 五指山 (扩展欧几里得)
五指山Time Limit 1000msMemory Limit 65536Kdescription西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:“我与你打个赌赛;你若有本事,一筋斗打出我这右手掌中,算你赢,再不用动刀兵苦争战,就请玉帝到西方居住,把天宫让你;若不能打出手掌,你还原创 2012-09-22 22:24:24 · 879 阅读 · 0 评论 -
nefu 117 大数素数个数的位数
素数个数的位数Time Limit 1000msMemory Limit 65536Kdescription小明是一个聪明的孩子,对数论有着很浓烈的兴趣。他发现求1到正整数10n 之间有多少个素数是一个很难的问题,该问题的难以决定于n 值的大小。现在的问题是,告诉你n的值,让你帮助小原创 2012-09-22 13:23:16 · 1141 阅读 · 0 评论 -
POJ 1142 Smith Numbers
题目大意:输入一个8位数内的n,找出一个比n大的、最小的史密斯数:其质数因子的每个数的每位数字之和等于n的每位数字之和思路:哎~~tie啊,但是常握了一个技巧就OK了。此题花费时间去求出500W内的素数绝对TIE,但是有没有不用求出素数又可以把n的质数因子分离数来的方法呢?答案在这:就是令k=2,直接令n/k,直到n%k!=0,k++;(当然在此之前,先判断n为合数。)为什么呢?k++?不原创 2012-09-03 15:34:42 · 592 阅读 · 0 评论 -
POJ1061 青蛙的约会
现在才AC这道题,无限囧。。记得老早就看过这道题题目大意:青蛙A的出发点为x,青蛙B的出发点为y,A跳一次m米,B跳一次n米。所在的纬度线(一圈)为L;思路:扩展欧几里得的入门题:(1)、两者相遇的条件:x+mt-y-nt=pL(n-m)t+Lp=x-y;即是:at+bp=x-y求出最小的t所以先要求出gcd(a,b);即是:exgcd(n-m,L,ar,br);/原创 2012-09-22 17:26:39 · 547 阅读 · 0 评论 -
POJ2115 C Looooops
题目大意&&思路:B-A=C*x-2^k*y 扩展欧几里德好久没一血了。感懂~~~呜呜。AC program:#include#include#include#include#includeusing namespace std; __int64 exgcd(__int64 a,__int64 b,__int64 &x, __int64 &y ){ __i原创 2012-09-22 23:04:32 · 710 阅读 · 0 评论 -
POJ2749 Sum of Consecutive Prime Numbers
题目大意:求出一个数可以有几个连续的素数和组成。思路:水题~~~不过有一点要注意~~10000内的素数最多有1300个,所以即使不用在线打表穷举都无压力,只是10^6执行次数而已。但是如果此题改为n<=10^5也许会再卡掉一些人,10万内素数个数为9900个左右,即差不多10^4个,在穷举的O(n)算法中应该会TIE,所以,在线打表更为理想,虽然耗时多了30ms。AC program:原创 2012-09-30 11:21:08 · 741 阅读 · 0 评论 -
POJ2773 HAPPY 2006(不能对LL大方之战)
题目大意:就是求m的第k个(升序)与m互质的数。思路:看了discuss才知道欧拉函数 的一个性质可以解决这道题:就是如果在[1,m]之间有cnt个数和m互质,即欧拉函数为cnt,那么在[n*m+1,(n+1)*m](n为正整数)区间内的欧拉函数也为cnt,即是有循环节。这就好办了,循环节最大才为100万,那么找到k/cnt这个区间,就可以枚举求得第K个数了。不过我写的实在很猥琐,1670ms原创 2012-09-30 16:23:31 · 1606 阅读 · 0 评论 -
暑期9_15队内练习赛 B题 大数取模+矩阵快速幂
题目大意:求sin(n!*ln(n)*f[n]%2012)的结果,n思路:哎~~菜菜菜啊~~却不是我的菜~~n!至少到2012都不用求后面的啦~~因为取余都为0了~~我还在傻乎乎的用矩阵求快速幂·~呜呜~~菜菜菜啊~~AC program:(暴力无优化代码:没有优化2012后都为0的情况)#include#include#include#include#includeus原创 2012-09-16 17:33:18 · 18401 阅读 · 0 评论 -
母函数模板
对应的母函数: #include#include#include#include#includeusing namespace std;#define maxn 400typedef __int64 LL;LL c1[maxn],c2[maxn];int main(){int n;while(cin>>n){ for(int i=0;i<=n;i++)原创 2012-10-02 18:18:56 · 657 阅读 · 0 评论 -
暑期第一次多校联合赛 I题 数学题
Problem I. 数学Time Limit: 1000ms Memory Limit: 65536kbDescription给出数列A1;A2; : : : ;AN,并设Bi = (A1 * A2 * AN /Ai ) mod (109 + 7)现要求把所有的Bi 算出来。Input输入包含多组测试数据。对于每组数据,第1 行,1 个整数N(1原创 2012-09-14 17:20:10 · 1220 阅读 · 0 评论 -
暑期多校联合比赛 8-24 K次方
K次方Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 14 Accepted Submission(s) : 7Font: Times New Roman | Verdana | GeorgiaFont Size: ← →原创 2012-08-24 21:08:36 · 1820 阅读 · 0 评论 -
POJ 2109 算数积累
题意:求大数指数。k^n=P,求n思路:2^4=16,所以 16的根号4为2,但是还有16的根号2为4#include#includeusing namespace std;int main(){ double k,p;while(cin>>k>>p){ cout} system("pause"); return 0;} PS:奉原创 2012-07-10 22:30:00 · 529 阅读 · 0 评论 -
大数素数筛选小结
总结:特别要注意第二重循环的j在int的情况下会爆掉#includeusing namespace std;#define maxn 1000000int a[maxn/10];int flag[maxn]; int main(){ freopen("f.out","w",stdout); memset(a,0,sizeof(a)); m原创 2012-09-03 15:13:22 · 631 阅读 · 0 评论 -
阶乘的标准分解式中素因数的指数
下面的资料来自:广东江门市华侨中学,赣南师范学院学报论文 program:(求阶乘含有的某个素数因子的指数)(1)、int cal(int n,int p){ if(n return 0; else return n/p+cal(n/p,p);}原创 2012-08-31 15:57:53 · 5127 阅读 · 0 评论 -
gcd 与 lcm
题目描述: G - GCD & LCMCrawling in process...Crawling failedTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %lluSubmitStatusDescriptio原创 2012-08-21 21:38:01 · 1060 阅读 · 0 评论 -
集筛选素数因子和求出相应素数个数的小巧实用型函数
总结:之前这个算法在数论中因为素数而用的非常频繁,所以就小小的总结一下;后来才发现自己原来的代码偏的好厉害请看我的累赘标记:其实我一开始循环中使用i*i的,其实这样减低了这个函数的威力,直接把在变化着的n当做循环的边界是没有错的,因为每时每刻,对于变化着的n,其素数个因子也是当且仅存在一个是大于n的开方的。所以以n来做循环边界完全木有问题。然后再讲一下这个函数的原理:这个函数的i自增当且仅当i原创 2012-10-04 15:55:04 · 638 阅读 · 0 评论 -
HDU1597
题目大意:就是拼串,注意到第n个串,就有多少长度的数,每9个数一个循环。求最后的串中第n个数思路:超级水题,但是有一点很坑爹,2^31次方,int类型过不去!WA了5次,还以为是精度问题。先用等差数列的求和公式求出(解一元二次方程)n在第几串字符串中,再求出在该串中排第几,就可以通过模9来解决问题program:#include#include#include#incl原创 2012-08-29 22:24:36 · 703 阅读 · 0 评论 -
HDU 3826 Squarefree number
题目大意:如果一个数含有平方因子,则不是平方自由数,反之则是平方自由数。思路:在这题了解到一些实用的知识:若n能被一个数的平方整除,它肯定能被一个素因子的平方p^2整除,为什么呢?因为如果能被一个偶数的平方整出 由于偶数=2*x 一定含有质数2 故能被质素2的平方整出假如 一个数能被 一个奇数的平方整除 奇数=质数*x 故能被质素的平方整出然后求在100W内的素数,为什么是这个原创 2012-08-30 18:18:22 · 721 阅读 · 0 评论 -
POJ 1775 Sum of Factorials
题目大意:给出n,判断其是不是可以这样表示的数:9=1!+2!+3!思路:我的做法dfs无限tie了,,看了别人的解题报告,才写出来的。方法一:贪心,从最大的数(9!)开始减,遇到能减的都减!最后n如果为0,则可以!原理是:a!+b!+c!+d!(ad!>a!+b!+c!,如果n不减去d!的话,那么剩下的阶乘的和绝对不能把n搞死! 但是,当n减去d!又小于c!的时候怎么办呢?同理可得原创 2012-09-01 14:47:56 · 916 阅读 · 0 评论 -
POJ 1423 Big Number
题目大意:求n!的结果的位数n思路:首先要求一个数字有多少位,可以用(int)log10(num)+1,这样就求出num有多少位哎用log10()函数的结果最后要+1~因为运算的时候有精度缺失~不是很懂~~怪不得我之前都没得结果,只能先记一下了。囧。。更坑爹的是:要不是我在线打表的话,铁定无限TIE~~~囧。。program1:(在线打表)#include#includ原创 2012-09-12 20:46:10 · 575 阅读 · 0 评论 -
POJ3292 Semi-prime H-numbers
题目大意: H-numbers是4*n+1的数,H-primes是1*H-numbers,H-semi-primes是仅仅2个H-primes的数的乘积,然后问1~h(h是 H-numbers)里面有几个H-semi-primes。思路:题目说的通俗的就是:给出一堆H数,然后HP数的就像素数的定义(姑且称为H素数),然后HSP数就是2个HP数的乘积,也就是找出2个H素数,他们的乘积就是我们要的原创 2012-09-22 10:00:45 · 727 阅读 · 0 评论 -
HDU1788 Chinese remainder theorem again
题目大意:开始还真准备用同余线性方程组做了,后来仔细一看~~哟~~可以优化~~哈。思路:因为N%M1=M1-aN%M2=M2-aN%M3=M3-a即:N%Mi=Mi-a,所以 N%Mi+a=Mi,所以N+a和0同余于Mi(i=1,2,3……),特别要记住:能够化成和0同余的一定要变式,因为这样简单多了,完全转化为求Mi的最小公倍数,即是:N+a= (Mi的最小公倍数)原创 2012-09-26 11:03:05 · 730 阅读 · 0 评论 -
扩展Euclid小小总结
前面我们说过,gcd(a,b)可以表示为a和b的最小的正线性组合。现在我们就要求这个最小的正线性组合ax+by中的x和y。这个可以利用我们的Euclid算法。从最简单的情况开始。当b=0时,我们取x=1,y=0。当b≠0时呢?假设gcd(a,b)=d,则gcd(b,a mod b)=d。若我们已经求出了gcd(b,a mod b)的线性组合表示bx'+(a mod b)y',则gcd(原创 2012-09-18 11:47:36 · 914 阅读 · 0 评论 -
求1亿内的素数个数
筛法 program:(足足要5s)#include#include #include#include#includeusing namespace std;int ff[100000000];int pp[10000000]; int main(){ for(__int64 i=2;i*i<=100000000;i++) if(!ff[i])原创 2012-10-01 11:04:27 · 1273 阅读 · 0 评论 -
HDU1058
题目大意:输出第n个(素数因子只能为2、3、5、7(或者关系))的合数思路:这个水题贴上来是因为第一次打超级长的表啊(哈哈,有意思),常规做法是用指数去四个for循环就搞定了 (打表程序)program:(由于数太大,我是分开来进行for循环的)#include#include#includeusing namespace std; int t[6000]; i原创 2012-08-29 22:08:13 · 3979 阅读 · 0 评论