随笔分类 - 数论
摘要:欧拉函数欧拉函数是数论中很重要的一个函数,欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数的个数,记做:φ(n),其中φ(1)被定义为1,但是并没有任何实质的意义。定义小于n且和n互质的数构成的集合为Zn,称呼这个集合为n的完全余数集合。显然,对于素数p,φ(p)= p -1.对于两个素数p、q,他们的乘积n = pq 满足φ(n) =(p-1)(q-1) 证明:对于质数p,q,满足φ(n) =(p-1)(q-1) 考虑n的完全余数集Zn = { 1,2,....,pq -1} 而不和n互质的集合由下面三个集合的并构成: 1) 能够被p整除的集合{p,2p,3p,....,(q...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1695题意:求 1~b 和 1~ d 有 多少对 数 的 gcd(x,y) = k ? x = 5 y=7 和 x= 7,y = 5 被认为是 同一种。题解:如果两个数的 最大 公约数 是 k 的 话 ,那么 x/k 与 y /k 是 互质的。所以 原题 可以转化为 求 1~b/k 和 1~d/k 有 多少对 互质的 数。假设 b = b/k,d= d/k ,b<d1:对于 1~b 我们可以 利用 欧拉函数 求 其 欧拉函数值 。欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数的个数,记做:φ.
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4336题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 。求 需要买多少包 才能集齐 n 张卡片 ,求包数的 期望 。题解 : 容斥原理 。每个bag中什么卡的机会都有,说明每个概率都会有交集,这样就会想到一个图,就是右下面那个 然后就这个公式了,还是很好理解的 1#include<cstdio>2#include<cstring>3#include<cmath>4#include<iostream>5#incl
阅读全文
摘要:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=15&problem=1266&mosmsg=Submission+received+with+ID+9619336题意: 给定 n,m 和 m 个数 ,求 1~n 中 不能 能被 m个数中的任意 一个数整除 的个数题解: 首先明白对于集合[1,n]内能被a整除的数的个数为n/a,既能被a整除又能被b整除的数的个数为n/lcm(a,b)(a,b的最小公倍数);容斥原
阅读全文
摘要:转自 :http://www.cppblog.com/vici/archive/2011/09/05/155103.aspx容斥原理(翻译) 前言: 这篇文章发表于http://e-maxx.ru/algo/inclusion_exclusion_principle,原文是俄语的。由于文章确实很实用,而且鉴于国内俄文资料翻译的匮乏,我下决心将其翻译之。由于 俄语对我来说如同乱码,而用Google直接翻译中文的话又变得面目全非,所以只能先用Google翻译成英语,再反复读,慢慢理解英语的意思,实在是弄 得我头昏脑胀。因此在理解文章意思然后翻译成中文的时候,中文都不知道如何表述了...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2449题意 :纯高斯消元 ;输入 n 行 ,每行 n+1个数带代表 系数和 值 ai1,ai2,ai3…..ain, bi ai1*x1+ai2*x2+......ain*xn=bi求解 xi 若没有整数解 输出 分数 ,若没有解 输出 No solution.copy 别人的 高精度 Gauss (留着用)(不会java 啊 ) 1importjava.util.*;2importjava.math.*;34classfraction{5BigIntegera,b;6publicfraction(){7a.
阅读全文
摘要:http://poj.org/problem?id=1753题意:有4*4的正方形,每个格子要么是黑色,要么是白色,当把一个格子的颜色改变(黑->白或者白->黑)时,其周围上下左右(如果存在的话)的格子的颜色也被反转,问至少反转几个格子可以使4*4的正方形变为纯白或者纯黑? 这道题 可以 用 bfs 也可用 dfs 但在学 Gauss 就用了 Gauss,费劲 ,还有枚举 自由变量的所有可能 ,好,麻烦(因为 自由变量的值可以影响 确定的 变量的值 所以 要 枚举所有的可能 来确定最小值)。。。。。。1#include<cstdio>2#include<cstri
阅读全文
摘要:http://poj.org/problem?id=1681题意“:一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右 都将改变颜色);给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要染几次? 若 不能 染成 输出 inf。题解:和1222开关 问题一样,只不过是 将 开关 换成了 染色。E(a) = xa*A11 ^ xb*A12 ^ xc*A13 ^ S(a); E(b) = xa*A21 ^ xb*A22 ^ xc*A23 ^ S(b); E(c) = xa*A31 ^ xb*A32 ^ xc*A33 ^ S(c);将是s
阅读全文
摘要:http://poj.org/problem?id=1222题意: 题目大意:给一个5*6的01矩阵,0表示灯暗的,1表示灯亮着。矩阵中每个位置表示一个按钮,当按钮按动时它周围(上下左右)的灯变成相反的状态。问怎么按可以将所有的灯都变成暗的。题解:首先我们知道每一个灯只能按一次 ,因为 按两次 等于不安和 1830 一样 只不过是 变为了 二维,我么只要 对它门重新编号就可以了 。依然是E(a) = xa*A11 ^ xb*A12 ^ xc*A13 ^ S(a); E(b) = xa*A21 ^ xb*A22 ^ xc*A23 ^ S(b); E(c) = xa*A31 ^ xb*A32 ..
阅读全文
摘要:题意:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开 关的状态如果原来为开就变为关,如果为关就变为开。你的目标是经过若干次开关操作后使得最后N个开关达到一个特定的状态。对于任意一个开关,最多只能进行 一次开关操作。你的任务是,计算有多少种可以达到指定状态的方法。(不计开关操作的顺序)题解:这题是给定N个灯的初始和最终状态,再给定一些关系,这些关系说明按某个开关可能影响其他的灯的开关情况,可以将这种关系视为一种取反的关系。 对于这题我们假设一组数据: 30 1 01 1 01 22 31 33 20
阅读全文
摘要:高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组。 所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。 以上是线性代数课的回顾,下面来说说高斯消元法在编程中的应用。 首先,先介绍程序中高斯消元法的步骤: (我们设方程组中方程的个数为equ,变元的个数为var,注意:一般情况下是n个方程,n个变元,但是有些题目就故意让方程数与变元数不同) 1. 把方程组转换成增广矩阵。 2. 利用初等行变换来把增广矩阵转换成行阶梯阵。 .
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4394题意:M^2%10^x=N (x=0,1,2,3....),给你一个N,求M,x为0,1,2,3....其中一个数就行了。找不到M输出None 也就是求N是某个数的平方的后缀(包括本身)。题解 : bfs 搜素每一种可能的情况 ,首先搜索 个位,然后十位 等等。。。。 1#include<cstdio>2#include<cstring>3#include<cmath>4#include<iostream>5#include<algorithm>
阅读全文
摘要:其实这题用欧几里德扩展原理可以很快的解决,先来看下什么是欧几里德扩展原理: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a = kb +r 因此d也是(a,b)的公约数 因此(a,b)和(b,a mod...
阅读全文
摘要:高精度除法:(利用了 减法)http://poj.grids.cn/practice/2737/原理 : 例如 a=13455 除以 b=3先把 3 增大为 30000不够减 右移一位 变为 3000 这样不断的减直到 不够减 为 1456 则 可知 商的 千位 为 4(因为 3000 是 3 的 1000倍)这样 3000 在右移一位 300依此类推 得到 百位、十位,个位; #include<stdio.h>#include<string.h>const int maxn=300;int a[maxn],b[maxn],c[maxn];char str1[maxn]
阅读全文
摘要:求1~N当中约数个数最多的数”问题的优化2010-04-13 20:56【问题描述】求1~N当中约数个数最多的数,若有多解则输出最小的数。【输入格式】输入文件只有一行。这一行有一个数N(1≤N<10^17)。【输出格式】输出文件只有一行。这一行有一个数,即所求的数。【输入样例】2000【输出样例】1680题目分析:(1)此题最容易想到的是穷举,但是肯定超时。(2)我们可以知道,计算约数的个数和质因数分解有着很大的联系:若Q的质因数分解为:Q=p1^k1*p2^k2*…*pm^km(p1…pm为素数,k1…km≥1),则Q有(k1+1)(k2+1)…(km+1)个约数。但是质因数分解的时间
阅读全文
摘要:题意:给出n物品,每个物品有两个参数,价值v,数目m 求,将这些物品分成两份,这两份的价值差值最小。母函数求解,注意初始化的不同#include<stdio.h>#include<string.h>int v[55],num[55];int a[300000],b[200000];int main(){ int n,i,j,k; while(scanf("%d",&n)!=EOF) { if(n<0)break; int sum=0; for(i=1;i<=n;i++) { scanf("%d%d"...
阅读全文
摘要:转自 Tanky Woo母函数(Generating function)详解前段时间写了一篇《背包之01背包、完全背包、多重背包详解》,看到支持的人很多,我不是大牛,只是一个和大家一样学习的人,写这些文章的目的只是为了一是希望让大家学的轻松,二是让自己复习起来更方便。(PS:大家觉得我的文章还过...
阅读全文
摘要:鸽巢定理的简单形式 鸽巢原理(抽屉原理):如果有n+1个鸽子要进n个鸽巢,则至少存在一个鸽巢种包含两个或更多的鸽子。看上去是一句“废话”,不过这句”废话“在用来证明一个排列或则某种现象的存在性上相当有魅力!关于鸽巢原理更抽象的表述:• If X has more elements than Y, then f is not one-to-one.• If X and Y have the same number of elements and f is onto, then f is one-to-one.• If X and Y have the same number of elemen.
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4248 题解: 给定n种颜色的石头,每种颜色有si颗,同种颜色的石头不区分。问能构成多少种不同的石头序列(不同的序列是指:1.石头数不同;2.石头数相同,至少一个位置的石头颜色不同) dp[ i ][ j ]表示:考虑前i种石头构成的长度为j的序列的个数。 转台转移方程: dp[ i ][ j ] = dp[ i-1 ][ j ]; //未放入第i种颜色的石头 for k := 1 ~ min( j , s[ i ] ) //放入k个第i种颜色的石头 dp[ i ][ j ] ...
阅读全文
摘要:参考地址:http://baike.baidu.com/view/1478219.htm 设 a>b。 1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0; 2,ab<>0 时 设 ax1+by1=gcd(a,b); bx2+(a mod b)y2=gcd(b,a mod b); 根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b); 则:ax1+by1=bx2+(a mod b)y2; 即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2; 根据恒等定理得:x1=y2; y1=x2-(a/b)*y2; .
阅读全文
浙公网安备 33010602011771号