随笔分类 - 数学--数论
摘要:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=48388前段时间偶然碰到的一道题,今天突然想到没把它记录下来。比较不错的扩展欧几里德求解的应用题意求是否满足ax+by=c gcd(a,b)==1 a>=0&&b>=0数比较大 ...
        阅读全文
            
摘要:矩阵快速幂的模板矩阵的知识太多了,这里贴出一部分常用的。 矩阵的加法运算满足交换律:A+B=B+A[4]。矩阵的转置和数乘运算对加法满足分配律:(A+B)TAT+BTc(A+B)cA+cB 矩阵加法和数乘两种运算使得成为一个mn维的实数线性空间。而转置和数乘运算满足类似于结合律的规律:c(AT)(cA)T.矩阵的乘法满足结合律和对矩阵加法的分配律(左分配律和右分配律):结合律: (AB)CA(BC),左分配律:(A + B)CAC+BC,右分配律:C(A + B)CA+CB.矩阵的乘法与数乘运算之间也满足类似结合律的规律;与转置之间则满足倒置的分配律。c(AB)(cA)BA(cB)(...
        阅读全文
            
摘要:高斯第一篇poj1222EXTENDED LIGHTS OUT状压枚举法 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 using namespace std; 11 #define N 100000 12 #define LL long long 13 #define INF 0xfffffff 14 const double eps = 1e-8; 15 const double pi = acos(-1.0); ...
        阅读全文
            
摘要:链接之前队内赛中的一道题目 当时怎么想也没想到,就一直放到了今天,刚才看另一题的讲解突然看到时拿这个题作为引子来讲的,就仔细看了下。参考《《具体数学》》 p7。 Josephus问题开始是讲了一个古老的故事,说J和同伴陷入险境,大家不愿做俘虏,就想了个游戏来进行自杀,每第二个人就要去死。。J觉得这样很傻,并很快的算出了自己该在的位置,逃脱了这无聊的自杀。由此引出了这个有趣的算法。这本书上讲的很清楚, 我就大体概括一下。可以先从10个人来看 很明显第一次死掉的是全部的偶数, 然后是 是3 7 1 9.那么J(10) = 5;可以猜测所有的J(n)都为奇数,因为第一轮就杀掉了全部的偶数,很明显。。
        阅读全文
            
摘要:对于数论 首先要提的当然是素数了 先从素数开始 这里的题目大部分来自网上一大神的数学题的总结 自己挑了一部分拿来练习POJ 2689Prime Distance经典的区间素数筛选一般看题的时候重点会看下数据范围 这题明显告诉你了l u 差不超过100W 那就想到可以从这里入手 对于100W内的素数我们是可以很快筛出来的 21Y就不太可能了所以可以转换下 先把47000内的素数打表筛出来 然后再用这些素数去筛 l-u内的素数 筛法与筛小的类似 因为差不超过100W 所以是可以很快解决掉的注意一下 有1的情况吧 1 #include 2 #include 3 #include 4 #includ.
        阅读全文
            
摘要:A记得以前做过 当时好像没做对 就是找个子串 满足括号的匹配 []最多的开两个栈模拟 标记下就行 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 10001012 char s[N];13 char st[N];14 int sn[N][3];15 int main()16 {17 int i,k,top=0;18 cin>>s;19 k = strl...
        阅读全文
            
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2164贴一篇写组合数求mod比较好的帖子这里的n,m比较小 直接利用公式递推求解即可c(n,m) =c(n - 1,m) + c(n – 1, m – 1) 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define LL long long1
        阅读全文
            
摘要:1430即使是枚举 也是有一定技术含量的 对于ax+by = n; 枚举max(a,b)中的系数 这样可以确定另一个 但问题是如何确定上限 假设max(a,b) = a,很显然是不会超n/a的 但这样还是会超时的可以设想一下假如x比b大 那么它可以拆分为x'+b吧 那把b合并y那里就好了 很明显也是不会超过b的 这样复杂度就不会超过sqrt(n) 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define LL long long 9 int mai
        阅读全文
            
摘要:1343想了好一会 以为会有什么定理呢 没想到 就试着搜了 看来素数还是很多的 跑的飞快注意会有前导0的情况 还有0,1不是素数。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 #define LL long long11 int flag;12 char a[20];13 LL p[20];14 int judge(LL x)15 {16 if(x12)28 {29 if(ju...
        阅读全文
            
摘要:1091容斥原理 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int p[110],g,f[55],q[55],o,vis[55],pa[55],n,kk; 9 #define LL long long10 void init()11 {12 int i,j;13 for(i = 2; i 1&&s%x==0)31 {32 s/=x;33 x--;34 }35 ...
        阅读全文
            
摘要:1141越来越喜欢数论了 很有意思先看个RSA的介绍RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。[1]RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod
        阅读全文
            
摘要:1748反素数素数的个数随大小的递增而递减 可以相同注意各种超啊 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define INF 1e19 9 #define LL unsigned long long10 #define N 3200011 int p[N],f[N],g,po[N];12 LL maxz,tt,pp[N][100],n;13 void init()14 {15 int i,j;16 17 for(i = 2; i I...
        阅读全文
            
摘要:CF的专业题解 :The problem was to find greatest d, such that ai ≥ d, ai mod d ≤ k holds for each i.Let m = min(ai), then d ≤ m. Let consider two cases:. In this case we will brute force answer from k + 1 to m. We can check, if number d is a correct answer in the following way:We have to check that ai mod.
        阅读全文
            
摘要:1355其实就是求质因子的个数 这样肯定是最多的 注意一下 除到最后不是1的情况 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 32000 9 int p[N],g,f[N];10 void init()11 {12 int i,j;13 f[0] = 1;14 f[1] = 1;15 for(i = 2; i >t;28 while(t--)29 {30 cin>>n>>m...
        阅读全文
            
摘要:1204大体推推 会出来这个式子 x(x-1) = k*n;n = p*q ;x(x-1)%(p*q)==0;因为p,q都为素数 那也就是说x和x-1中必定包含这两个数 而且一个里面只能有一个 不然会大于等于N当上面的k=0时 x=0||x=1 这是固定的然后 {x-pi=0; (x-1)-qi = 1}化这一组 就会变成pi-qi=1 这就变成了扩展欧几里得 必定存在一组解 解出来带入一下 注意一下负数就可以了 下一组同样这样计算{x-pi=1; (x-1)-qi = 0} 1 #include 2 #include 3 #include 4 #include 5 #include 6 #.
        阅读全文
            
摘要:1049求约数的个数 质因子数的个数+1相乘 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 10000 9 int f[N+10],a[12],p[N+10],g,o[N+10];10 void init()11 {12 int i,j;13 for(i = 2; i >a[i];29 for(i = 1; i <= 10 ; i++)30 {31 int x = a[i];32 ...
        阅读全文
            
摘要:梅森素数 打表搜梅森素数的时候 看到一句话 欧拉在双目失明的情况下 用心算出了2的31次方-1是素数 他用心算的。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1000010 9 int p[40]={2,3,5,7,13,17,19,31,61,89,107,127,10 521,607,1279,2203,2281,3217,4253,4423,9689,9941,11 11213,19937,21701,23209,44497.
        阅读全文
            
摘要:1118优化1.枚举到sqrt(n)2.区间有质数直接输出最大质数3.a=1 直接输出1 4.边+边与最小值比较 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1000010 9 double minz = N;10 bool f[N];11 void init()12 {13 int i,j;14 for(i = 2 ; i minz) break;36 }37 return sum/k;38 }39 i...
        阅读全文
            
摘要:一直没想到怎么去重 看了眼别人的代码...so easy啊同余啊 唉..脑子被僵尸吃掉了难得1000出个简单的 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define LL long long10 int vis[1010];11 class SparseFactorialDiv212 {13 public:14 long long getCount(long long lo, long long hi, long...
        阅读全文
            
摘要:数学so奇妙。。这题肯定会有一个循环节 就是最小公倍数对于公倍数内的相同的数的判断 就要借助最大公约数了 想想可以想明白 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1000100 9 #define LL __int6410 LL o[N][27];11 char s1[N],s2[N];12 LL gcd(int a,int b)13 {14 return b==0?a:gcd(b,a%b);15 }16 int main(...
        阅读全文
            
 
                    
                     
                    
                 
                    
                
 
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号