- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OI中的数论 江家和 一、进位计数制 二、数字分离与回文数 三、整除 四、互质(互素) 五、同余 一、进位计数制 进制表示 表示b进制下的n位数。 1. b进制向十进制转换 乘以基数并展开: 2.十进制向b进制转换 整数部分除以基数并倒取余数。 小数部分乘以基数,并顺取整数部分。 例题1:天平I 一个天平,砝码分别为1g、3g、9g、27g、…6561g…,每个砝码只有一个,要称重的物品放在天平的左侧,而砝码允许放在天平的左右两侧。已知一个物品的质量N,问如何称重? 数据规模:N≤108 分析: 就是将N转换成三进制后,将三进制中的0、1、2三个状态转换成 0、1 、-1 ,具体的说,就是0和1不变,2变成-1后,其高一位加1。 例题2:天平II 一个天平,砝码分别为1g、3g、9g、27g、… 6561g…,每个砝码只有一个,要称重的物品放在天平的左侧,而砝码只允许放在天平的右侧。将由这个系统可以称出来的重量按从小到大的顺序进行排列,得到下列序列:1,3,4,9,10,...。问其中的第K个重量是多少? 数据规模:K≤105 分析: 这就是NOIP2006PJ《序列》中p=3时的简化版 将K转换成二进制并按三(p=3)进制展开。 例题3:倒水 一天,CC买了n个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着CC他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,合并并丢弃一个空瓶(不能丢弃有水的瓶子)。显然在某些情况下CC无法达到目标。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以达到目标。问最少需要买多少新瓶子才能达到目标呢? 数据规模:N≤109,K≤1000 分析: 分析: 根据题意,保留的瓶子的水容量一定为2的方幂,就是求N的二进制形式中,从高位到低位保留K位1,所需要补充的最小差值。 例如N=27=(11011)2,k=3时 二、数字分离与回文数 数字分离 用于统计整数数码、位数、逆序等 while (n0) dobegin // n mod 10 就是n的每一位数字 n=n div 10; end; 统计n的位数 function cont(n:integer):integer; var s:integer; begin s:=0; while n0 do begin inc(s); n:=n div 10; end; exit(s); end; 统计n的数字和 function sum(n:integer):integer; var s:integer; begin s:=0; while n0 do begin inc(s,n mod 10); n:=n div 10; end; exit(s); end; 计算n的逆序数 function rev(n:integer):integer; var s:integer; begin s:=0; while n0 do begin s:=s*10+n mod 10; n:=n div 10; end; exit(s); end; 判断n是否回文数 function rev(n:integer):boolean; var s,m:integer; begin s:=0;m:=n; while n0 do begin s:=s*10+n mod 10; n:=n div 10; end; exit(s=m); end; 判断n在b进制下是否为回文数 function palb(n,b:integer):boolean; var s,m:integer; begin s:=0;m:=n; while n0 do begin s:=s*b+n mod b; n:=n div b; end; exit(s=m); end; 例题4:进制回文数 输入一个正整数N,求从1到N中十进制、二进制和八进制均为回文数的数字个数。注意:一位数也是回文数。 数据规模:N≤1000000。 例题5:回文平方数 给定一个进制B(2≤B≤20,由十进制表示)和N,输出所有的大于等于1小于等于N(十进制下)且它的平方用B进制表示时是回文数的数
文档评论(0)