
数论
数论
成长的小牛233
不辜负每一份热爱
展开
-
全排列算法解析(视频+详解+代码+STL)
全排列生成算法刚开始自学的时候搜了两三个scdn中关于讲解全排列问题的博客,但是我理解能力比较差还是没有完全理解,后来就在网上搜索了视频才完全弄懂,现在把我理解的分享给你们。学习视频:http://v.ku6.com/show/RP7r6vew4Qb_MCF1eYZeOg...html1、 没有重复字符的全排列问题例如:对abcd进行全排列如图:分析:a b c d1、 定a 对b c d进行...原创 2016-10-09 16:58:42 · 3745 阅读 · 5 评论 -
poj1166--The Clocks(高斯消元)
The ClocksTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 16232Accepted: 6638Description|-------| |-------| |-------|| | |转载 2016-10-06 16:00:35 · 468 阅读 · 0 评论 -
向量的叉积
向量的叉积性质都忘完了……但是它可以用来判断点在直线的某侧。进而可以解决点是否在三角形内,两个矩形是否重叠等问题。向量的叉积的模表示这两个向量围成的平行四边形的面积。 设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P×Q = x1*y2 - x2*y1,其结果是一个伪矢量。原创 2016-04-17 21:28:54 · 708 阅读 · 0 评论 -
【计算几何】线段相交
问题描述:已知两条线段P1P2和Q1Q2,判断P1P2和Q1Q2是否相交,若相交,求出交点。两条线段的位置关系可以分为三类:有重合部分、无重合部分但有交点、无交点。算法的步骤如下:1.快速排斥实验。设以线段P1P2为对角线的矩形为R,设以线段Q1Q2为对角线的矩形为T,如果R和T不相交,则两线段不相交。2.跨立实验。如果两线段相交,则两线段必然相互跨立对方。若P1P2跨转载 2016-04-17 20:07:15 · 1163 阅读 · 0 评论 -
平方剩余(例题+详解+代码模板)
平方剩余 (poj 1808)题意:判断平方剩余,即判断(x^2)%p=a是否有解。限制:|a| 思路:用欧拉准则计算勒让德符号(用来判断平方剩余)/*poj 1808 题意: 判断平方剩余,即判断(x^2)%p=a是否有解。 限制: |a| <= 1e9 && a % p !=0; 2 < p < 1e9 && p为奇素数。原创 2016-10-06 17:07:29 · 4422 阅读 · 0 评论 -
中国剩余定理(模板+代码)
#include#include using namespace std;//扩展欧几里得算法int exgcd(int a,int b,int &x,int &y){ int d; if(b==0) { x=1;y=0; return a; } d=exgcd(b,a%b,y,x); y-=a/b*x;原创 2016-10-06 16:47:14 · 3361 阅读 · 2 评论 -
Stein算法(求两个数最大公约数)
欧几里德算法是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来。考虑现在的硬件平台,一般整数最多也就是64位,对于这样的整数,计算两个数之间的模是很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就原创 2016-10-06 16:39:17 · 864 阅读 · 0 评论 -
扩展的欧几里得算法
任务:求出A,B的最大公约数,且求出X,Y满足AX+BY=GCD(A,B).模板代码:int extendGcd(int a,int b,int &x,int &y){ if(!b) { x=1; y=0; return a; } else { int r=extendGcd(b,a%b,y,x); y-=x*(a/b); return r;原创 2016-10-06 16:07:52 · 310 阅读 · 0 评论 -
DFS全排列
第一种方法:package com.tjrac_java_2;import java.util.Scanner;public class Fun { public static int s=0; static int[] a=new int[100000]; public static void main(String[] args) { int...原创 2018-03-30 18:59:25 · 271 阅读 · 0 评论 -
欧几里得算法
int gcd(int a,int b){ return b==0?a:gcd(b,a%b); }原创 2016-10-06 16:03:16 · 284 阅读 · 0 评论 -
数值方法求积分 详解+模板代码
什么是数值积分 数值积分可以用来求定积分的近似值。对于很多函数来说,我们是可以使用初等函数来表示出其积分的,对于这种函数,只需要求出不定积分然后代入值就能得到定积分了。 可是除此之外还有许多难求的函数和没法使用初等函数表示的函数。当我们想要求出它们的定积分的时候,需要使用数值积分来求解。 在ACM中一些题目需要使用数值积分来求解,以下列出一些求数值积分的方法,由简单到难,而对转载 2016-10-07 09:40:22 · 6508 阅读 · 0 评论 -
hdu3579(中国剩余问题经典)
DescriptionOne day I was shopping in the supermarket. There was a cashier(收银员) counting coins seriously when a little kid running and singing "门前大桥下游过一群鸭,快来快来 数一数,二四六七八". And then the cashier put原创 2016-10-10 21:19:10 · 799 阅读 · 0 评论 -
三种方法求最长子序列问题
#include#includeusing namespace std;int maxsum(int a[],int x,int y){ int v,l,r; if(y-x==1)//只有一个元素,直接返回 return a[x]; int m=x+(y-x)/2;//分治法第一步,划分成[x,m)和[m,y) int maxs=max(maxsum(a,x,m),maxsu原创 2016-10-16 13:46:28 · 790 阅读 · 0 评论 -
中国剩余问题(简介+详解)
中国剩余定理 我国古代数学名著《孙子算经》载有一道数学问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?”这里的几何指多少的意思。翻译成数学语言就是:求正整数N,使N除以3余2,除以5余3,除以7余2。 如何求符合上述条件的正整数N呢?《孙子算经》给出了一个非常有效的巧妙解法。术曰:“三、三数之剩二,置一百四十;五、五数之剩三,置六十三原创 2016-10-06 16:41:36 · 8783 阅读 · 0 评论 -
原根(详解+代码实现+例题+快速求解一个数的原根)
1.原根定义假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1简单来说,g^i mod p ≠ g^j mod p (p为素数)其中i≠j且i, j介於1至(p-1)之间则g为p的原根。 简单的来说,如果g是P的原根,那么g的(1...P-1)次幂mod P的结果一定互不相同。 那么简化一下:首先看一下欧拉定理:欧拉定理(也转载 2016-10-06 16:59:25 · 12968 阅读 · 0 评论 -
离散对数(例题+详解+代码模板)
题意:给定x,n,m,求x^y=n(mod m)的解(其中m是素数)求解一个最小的x满足给定的方程Bx == N (mod P)使用baby_step_giant_step算法。也就是先小步后大步算法。1、令x=i*m+j (m=ceil(sqrt(p))),那么原式化为 B^(i*m)*B^j==N(MOD P)B^j==N*B^(-i*原创 2016-10-06 17:18:50 · 3041 阅读 · 1 评论 -
N次剩余(详解+例题+代码)
从《国际大学生程序设计大赛算法与实现》中所学任务:给定N, a, p, 求出(x^N)%p=a 在模p意义下的所有解x。说明:令g为p的原根,因为p为素数,所以phi(p)=p-1。由原根的性质得:如果g为p的原根,则:g^i mod p != g^j mod p (p为素数), 其中i != j且i, j介於1至(p-1)之间所以,可以设g^y=x, g^t=a,原创 2016-10-06 17:28:28 · 5947 阅读 · 0 评论 -
素数筛选法(模板)
#include <stdio.h>#include <string.h>#include <math.h>#define MAX 1000000int is_prime[MAX+5] = {1}; //is_prime[i]是素数为1,不是素数为0int prime_num[MAX]; //prime_num[i]是第i个素数...原创 2016-10-06 17:31:47 · 550 阅读 · 0 评论 -
Mobius函数计算 定义+代码模板
定义编辑f(n)和g(n)是定义在正整数集合上的两个函数,若 则 反之亦然。 其中 μ(d)=1, 若d=偶数个不同素数之积 μ(d)=(-1)r, 若d=奇数个不同素数之积 μ(d)=0, 其他例如:μ( 30) = μ( 2·3·5 ) = (-1)3μ(12) = μ( 3·22) = 0原创 2016-10-07 09:04:30 · 1797 阅读 · 0 评论 -
包子凑数(蓝桥杯)
标题:包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这-。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包子大叔...原创 2018-03-31 19:12:48 · 518 阅读 · 1 评论