![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM 数论
文章平均质量分 58
huixisheng
无所谓结果如何,只要一直坚持并努力就好!!
展开
-
http://acm.hdu.edu.cn/showproblem.php?pid=3501 欧拉函数
<br />/* 如果早点学习了欧拉函数,这个题目也许就不会做不出来了 下面我们求出小于N且与N互质的正整数之和, 设为S. 不妨设这些数为a[1], a[2], ..., a[ phi(N) ], 其中phi(N)是N的欧拉函数值.对1 <= i <= phi(N), 由gcd(N, a[i]) = 1可知gcd(N, N - a[i]) = 1. 这里可以采用反证: (这里我觉得用中国的剩余定理就可以证明的) 设gcd(N, N - a[i]) = k > 1, 则k|N, k|(N原创 2010-08-04 23:11:00 · 938 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=2891 欧几里德线性同余方程
<br />/*对于同余方程组:x=a1 (mod m1)x=a2 (mod m2)方程组有一个小于m(m1,m2的最小公倍数)的非负整数解的充要条件是(a1-a2)%gcd(m1,m2)=0,同样利用扩展欧几里得算法。两式联立:a1+m1*y=a2+m2*z则:a1-a2=m2*z-m1*y这样就可以解出z和y,则:x=a2+m2*z而对于一般情形:(设m1,m2,...mk两两互素)时有:a=b[1] (mod w[1])a=b[2] (mod w[2]).....原创 2010-08-11 12:50:00 · 759 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1719
<br />/*这是一道想法题!因为任意一个friend number可以由两个friend number a,b 构成,且为ab+b+a;想法就是在这个表达式中!因为 ab+a+b=ab+a+b+1-1=(a+1)*(b+1)-1假设 a=(c+1)*(d+1)-1;b=(e+1)*(f+1)-1;得到 ab+a+b=(c+1)*(d+1)*(e+1)*(f+1)-1带入数值化简就得到,ab+a+b=((1+1)^x)*((1+2)^y)-1 (x,y >=0)就把题目转原创 2010-08-09 13:06:00 · 557 阅读 · 0 评论 -
数学题目解题报告
对数学类题目小结中的题目的简单解题报告: 偶然在网上看到某牛人发的数学题目小结,于是拷了回来做,下面每道题目后面注释的是我写的简单解题报告(有些只是注意事项),而且并非所有都有做,所以希望大家理解,目前正在更新中。 原文连接在这里:http://hi.baidu.com/%B1%BF%D0%A1%BA%A2_shw/blog/item/5305e12c7289973e359bf768.html 这里题目之前有‘ #’ 的表示已过,‘ ?’ 表示做了但还没过。/***转载 2010-08-09 18:29:00 · 2902 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2674 (很神奇)
<br />/* * 一开始 2009 后面的全部为0 前面的用BigInteger 暴力 TLE * 后来试了很多收据从41开始后面的数据全部为0 前面的乘下就OK了 */import java.util.*;import java.io.*;import java.math.*;public class Main2674 { //static StreamTokenizer in = new StreamTokenizer(new BufferedReader(ne原创 2010-08-09 19:38:00 · 498 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=1808 二次剩余式
<br />/* *> 考虑形如x2≡n(mod m)的同余式,其中m > 1,(m,n)=1。若此同余式有解,则n称为模m的二次剩余;若此同余式无解,则n称为模m的二次非剩余。设p是一个奇素数,则模p的二次剩余和二次非剩余个数正好是“一半对一半”,下表给出几个较小的素数模的二次剩余和非剩余:> p 剩余 非剩余> 3 1 2> 5 1,4 2,3> 7 1,2,4 3,5,6> 11 1,3,4,5,9 2,6,7,8,10> 13 1,3,4,9,11,12 2,5,6,7,原创 2010-08-11 18:49:00 · 649 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=1284 (原根)
<br />/* poj 1284 原跟 设h为一整数,n为一正整数,(h,n)=k,适合h^k=1(mod n)的最小正整数k叫做h对n的次数。如果k=φ(n),则此时h被称为模n的原根。 1773年,欧拉证明了素数P有原根。1785年,勒让德证明:设k|(p-1),恰有φ(k)个模p互不同余的数对模p的次数为k。 大家可以去搜索一下“二次剩余” p是奇素数,如果{xi%p | 1 <= i <= p - 1} = {1,2,...,p-1},则称x是p的原根. 给出一个p,问它的原创 2010-08-11 18:52:00 · 1052 阅读 · 0 评论 -
数论--欧拉函数的整理(悔惜晟)
<br />相关题目: http://acm.hdu.edu.cn/showproblem.php?pid=2824 pku 2478(与前n个数互质的个数的求和) http://acm.hdu.edu.cn/showproblem.php?pid=3508 素因子的积 http://acm.hdu.edu.cn/showproblem.php?pid=2710 题目很简单,就是输出N个数素数因子最大的那一个 http://acm.hdu.edu.cn/showproblem.php?pid原创 2010-08-12 22:53:00 · 959 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2824 pku 2478(与前n个数互质的个数的求和)
<br />/* 一开始用了预处理,但是时间复杂程度很高,一直TLE 用了下面犀利的欧拉函数的求法AC了。这题跟hdu2824 差不多的 只是hdu那道要求更高 hdu __int64 long long 都要用%I64d输出地 pku long long %lld 以后这些细节要注意啊!! E(x)表示比x小的且与x互质的正整数的个数。 *若p是素数,E(p)=p-1。 *E(p^k)=p^k-p^(k-1)=(p-1)*P^(k-1) 证:令n=原创 2010-08-12 20:46:00 · 1293 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=2409 polya或者burnside
<br />/* 组合数学?? 查了很多资料这个题目很是很模糊。。*/#include <iostream>#include <cstdio>using namespace std; long long Gcd(long long a, long long b){ if(b == 0) return a; return Gcd(b, a % b);} inline long long Pow(long long a, long long b){原创 2010-08-17 21:51:00 · 506 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1452 因子求和
<br />/* * 求2004^x 的素数因子的和 * n = a1 ^ p1 * a2 ^ p2 *... a3 ^ p3 * n的因子之和 sum = (a1 ^ 0 + a1 ^ 1 + ... a1 ^ p1) * (a2 ^ 0 + a2 ^ 1 + ... a2 ^ p2) * (a / b) mod m = (a % (b * m)) / b * 将2004 进行因式分解带入公式就OK * 等比数列求和 s = (an * q原创 2010-08-21 18:43:00 · 917 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2441 犀利的证明
<br />/*令F(1)=1,F(N)=∑F(d)%2 (d|N 且d!=N)F(N)=1,则N在数组里。(除了1以外)1.对于N=P^a F(P)=F(1)=1,F(P*P)=F(1)+F(P)=0,F(P^a)=F(1)+F(P)+……F(P^(a-1))=F(1)+F(P)=0;2.对于N=P^a Q^b a=1时 b=1 F(N)=F(1)+F(P)+F(Q)=1 b=2 F(N)=F(1)+F(P)+F(Q)+F(P×Q)=原创 2010-09-18 18:50:00 · 618 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=2305 大数的b进制数 取模
<br />import java.io.*;import java.util.*;import java.math.*;public class Mainpku2305 { static Scanner in=new Scanner(new BufferedReader(new InputStreamReader(System.in))); public static void main(String[] args){ int b; while(in.hasNext()){原创 2010-09-18 22:26:00 · 995 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=1131 八进小数转十进制小数
<br />import java.io.*;import java.util.*;import java.math.*;public class Main { static Scanner in=new Scanner(new BufferedReader(new InputStreamReader(System.in))); public static void main(String[] args){ String tep; BigDecimal one = Bi原创 2010-09-18 21:29:00 · 670 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理
<br />/*Lucas theoremm = mk * p^k + mk-1 * p^k-1 +... +m1 * p + m0;n = nk * p^k + nk-1 * p^k-1 +... + n1 * p + n0;C(m,n)=C(mk,nk)*C(mk-1,nk-1)*...*C(m1,n1)*C(m0,n0);【题目大意】求C(n+m,n) % p的值。保证p是素数。*/#include <iostream>#include <cstdio>#d原创 2010-10-02 17:00:00 · 873 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2136
<br />/* * 开始TLE的后来把素数全部打在表上,在去找 合数的 最大素因子,这样就AC了 */import java.util.*;import java.io.*;public class Main2136 { static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); static PrintWriter out = n原创 2010-08-09 20:17:00 · 627 阅读 · 0 评论 -
扩展欧几里德和模线性性方程(总结)
<br />扩展欧几里德和模线性性方程定理一:设 a, b, c 是三个不全为 0 的整数。如果 a= b* q+ c, 其中 q 是整数,则 (a,b)= (b,c).证明:设 d1= (a,b), d2= (b,c). 有 d1| a+ (-q)* b,所以 d1| c,因而 d1 为 b, c 的公约数,所以 d1<= d2。同理,d2 是 a, b 的公因数,有 d2<= d1,故 d1== d2,定理成立。由定理一,可得到求最大公约数的欧几里德算法:int gcd( int a原创 2010-08-09 11:28:00 · 1017 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2879 又是一个公式的推倒
<br />/* 很奇怪,在Eclipse里面调试要先设置断点,输入数据就可以!! He[p^k]=2 He[N]为积性函数当N=p1^k1……pn^kn 时 He[N]=2^n这样求HeHe[N] 就是统计1-N中每个数质因数的个数之和t,HeHe[N]=2^t我们可以转化为 统计1-N中每个质数p在t中出现次数,p的每个倍数在t中的贡献是1,故p对t的贡献为 N/P.这是解题报告上讲的,可是看了好久都不是很理解,那个He[n] = 2 ^ k 怎么证明出来就是想不到看原创 2010-08-09 16:50:00 · 707 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1787 典型 欧拉函数(为何c++ 那样会RE)
<br />#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int N = 10005;bool hash[N];int main(){ int n; memset(hash, false, sizeof(hash)); for(int i = 2; i <= 100; i++) if(!hash[i]) for原创 2010-08-04 23:59:00 · 766 阅读 · 0 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=2407 很水的欧拉
<br />#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int N = 100005;bool hash[N];int main(){ int n; memset(hash, false, sizeof(hash)); for(int i = 2; i <= 100; i++) if(!hash[i]) fo原创 2010-08-05 00:07:00 · 483 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1124 N!末尾0的个数
<br />/* 题目很简单,就是求N! 的末尾0的个数 求阶乘末尾0的个数,对于较小的数的话可以计算出来后在算末尾0的个数,但是数字较大的时候则比较麻烦, 可以通过如下原理反复的除以5得到最后的结果: 原理是: 假如你把1×2×3×4×……×N中每一个因数分解质因数,结果就像: 1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×…… 10进制数结尾的每一个0都表示有一个因数10存在——任何进制都原创 2010-08-06 19:49:00 · 589 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1211 (水)
<br />/* 一开始以为自己题目理解错了,一开始以为M 与 m 是不一样的,搞的我郁闷死 该题只要解密就可以了,题目有不必要的信息 */#include <iostream>#include <cstdio>using namespace std;int main(){ int p, q, e, l; while( scanf("%d %d %d %d", &p, &q, &e, &l) != EOF ) { int n = p * q; int原创 2010-08-06 23:39:00 · 471 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1333
<br />/* 很简单的题目。直接模拟就好了,可是我开始就是wrong As this observation is also true for every prime number, Wilansky decided later that a (simple and unsophisticated) prime number is not worth being a Smith number, so he excluded them from the definition. 看了原创 2010-08-07 19:38:00 · 379 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1905 素数判断 + 二分
/* 题目的意思很简单,就是求伪素数 wrong 之后就开始怀疑自己的算法有问题, 在别的oj交RE, 于是一直找不到错误。 有时候自信很重要的!! */import java.util.*;import java.io.*;import java.math.*;public class Main1905 { static final int N = 40005; static boolean hash[] = new boolean[N];原创 2010-08-07 22:53:00 · 832 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=3307 (欧拉 + 推导公式 + gcd)
<br />/* * 解题: 题目描述很简单的说,然后我们可以推得这样一个公式: an = x^n * a0 + y*sigma(x+x^2+....+x^(n-1) ) ---> an = x^n*a0 + y/(x-1)*(x^n-1); 因为题目 给定 y mod (x-1) = 0 ; 那么 如果an % a0 == 0 ; 那么 可以表示 ( y/(x-1)*(x^n-1) )%a0 == 0; 设 m = y/(x-1), g = gcd(a0,m),那么我们可以得原创 2010-08-08 02:08:00 · 383 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2303 (素数打表 + java大数取模)
<br />/* * java 出来大数真的很方便的,本题用java 出来很简单 * 题意: k = P * q (p q 为素数 && p < q) if(p < l) 输出 BAD p else GOOD * 素数打表 + 大数取摸 */import java.io.*;import java.util.*;import java.math.*;public class Main2303 { static final int N = 1000005;原创 2010-08-08 14:29:00 · 649 阅读 · 1 评论 -
http://acm.pku.edu.cn/JudgeOnline/problem?id=2480 欧拉
<br />/* * pku22480.cpp * * Created on: 2010-8-6 * Author: hduacm * 这是用Eclipse 写的,刚开始用这个写c++ 觉得有些东西很陌生,还有就是是在Lunix 系统写的, * 就觉得更不顺手了,看来Eclipse 是很强大的。我想应该装个这样的系统玩玩了 * 数论的题目总是无从下手,很多定理都不知道,怎么作呢?? * * 别人的分析:原创 2010-08-06 13:39:00 · 593 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1005
<br />#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 2;const int mod = 7;struct Mat{ int num[N][N]; Mat() { for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) num[i][j] = 0; }};原创 2010-08-06 15:59:00 · 851 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1299 (求因子个数)
<br />/* 首先我们知道x、y都是大于n的数 假设 x = n + k (1 <= k <= n && x <= y) 代入1 / x + 1 / y = 1 / n,求出 y = n * (n + k) / k -> y = n^2 / k + n y肯定是一个整数,所以我们只要知道n * n / k为整数的k的个数 其实题目就是求n * n 的因子的个数 每一个数都能分解成n=p1^e1*p2^e2*p3^e3...pr^er p1..原创 2010-08-07 01:09:00 · 827 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2710
<br />/* 题目很简单,就是输出N个数素数因子最大的那一个, 预出来一下就OK 换了一种写代码的风格,开始好好联系java */import java.util.*;import java.io.*;import java.math.*;public class Main2710 { static final int N = 20005; static int prime[] = new int[N]; static boolean hash[] =原创 2010-08-08 12:34:00 · 523 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2866
<br />/* 对于java 另一种快的输入总是记不住!!就是背也要背下来!! 在网上的一段证明: n^b + p*n^(b-1) = m^b n^(b-1)*[n+p]=m^b 因为n里面要么有p因子,要么没有,所以 gcd(n^(b-1),n+p)=1或(含有p因子的数) 当gcd(n^(b-1),n+p)== (含有p因子的数)的时候,显然无解 因为 假设有解,那么n=K*p , K^(b-1) * p^b*(K+1原创 2010-08-08 17:02:00 · 462 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=3508 素因子的积
<br />/* 比赛的时候是发现一点小规律的,但是没有从小规律中得出正确的结论,结果一直悲剧收场 比赛看了解题报告,重新敲了下结果还是wrong 今天在百度无意间看见,但是很辛苦的才AC a(n)等于(n的phi(n)函数次幂)乘以((((n的约数d的阶乘)除以(d的d次幂))的mu(n/d)函数次幂)的乘积)。 其中,phi即欧拉函数,等于n*Product(n的质因子p)(1-1/p),即n*(1-1/p1)*(1-1/p2)*...*(1-1/pk)原创 2010-08-08 21:52:00 · 549 阅读 · 0 评论 -
http://acm.fzu.edu.cn/problem.php?pid=1564 C(n,k)和素数P的问题
<br />/*C(n,k)和素数P的问题公式:求C(n,k)中素因子P的个数:1.把n转化为P进制,并记它每个位上的和为S12.把n-k,k做同样的处理,得到S2,S3则C(n,k)中素因子P的个数:(S2+S3-S1)/(P-1)*/#include <iostream>#include <cstdio>#include <cstring>#include <bitset>#include <cmath>using namespace std;原创 2010-10-02 20:34:00 · 1015 阅读 · 0 评论