题目:http://community.topcoder.com/stat?c=problem_statement&pm=12083

这道题还是挺耐想的(至少对我来说是这样)。开始时我只会60%的算法,在借鉴了巨神zhx的代码并查阅了官方题解后才终于懂了点了。

两两互质的情形

首先,考虑简化的情形:若模板i的长度为li,我们加上限制,即所有模板的长度两两互质。

假设当前位置x对应第i个模板的位置为ai,当且仅当,而li是两两互质的,由中国剩余定理,x在范围内有唯一解。这样,这个问题就被秒掉了。

一般情形

下面考虑一般情形。

假设有两个模板i和j,,我们可以考虑将正整数集合中的元素按照模k的余数分成k个子集,设b属于集合Mt当且仅当b mod k = t。那么,如果x属于集合Mt,则有ai mod k = aj mod k = x mod k = t,因为ai = x mod li,而k | li。这样,我们实际上只需要考虑模k相同的(ai, aj),这相当于将模板i拆成了li / k个子模板,模板j拆成了lj / k个子模板,而gcd(li / k, lj / k) = 1,所以我们可以用前面的互质情形解决。

最终的解法

因为50以内的合数x必须满足,其中P为素数集合,所以我们可以考虑将小于sqrt(50)的素数和不小于sqrt(50)的素数分开考虑。小于sqrt(50)的素数只有2,3,5,7四个,而32 * 27 * 25 * 49很小,所以我们可以直接将li为2,3,5,7几个素数乘积的模板i扩展合并为一个新的长度为32 * 27 * 25 * 49的新模板。然而,除开这些模板,另外的模板和这个新模板的长度并不一定互质,如长度为22的模板。但是,我们注意到,对于其他在50以内的合数,即存在大于sqrt(50)的素因子的合数,它们含有的小于sqrt(50)的素因子不会太多,因为11 * 5 > 50,而11仅能和一个3相乘,或者和两个2相乘,再多一点就爆出50了。而且注意到,对于这种合数,大于sqrt(50)的素因子有且仅有一个,因为sqrt(50) * sqrt(50) = 50。所以,若模板i满足p | li,p > sqrt(50),则我们将它扩展为l' = 12 * li的新模板。这样我们得到了新的模板以替换旧模板,而它们的长度有且仅有两种:32 * 27 * 25 * 49,及2 * 2 * 3 * p,其中p为大于sqrt(50)的素数。它们的最大公因数显然是2 * 2 * 3,而它们拆分后的新长度显然是两两互质的。

[TCO 2012 Round 3A Level3] CowsMooing (数论,中国剩余定理,同余方程)的更多相关文章

  1. acm数论之旅--中国剩余定理

    ACM数论之旅9---中国剩余定理(CRT)(壮哉我大中华╰(*°▽°*)╯)   中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 ...

  2. 数论E - Biorhythms(中国剩余定理,一水)

    E - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Subm ...

  3. hihocode 九十七周 中国剩余定理

    题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...

  4. 《孙子算经》之"物不知数"题:中国剩余定理

    1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数.  如果 m ...

  5. POJ 1006 中国剩余定理

    #include <cstdio> int main() { // freopen("in.txt","r",stdin); ; while(sca ...

  6. poj1006中国剩余定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 103506   Accepted: 31995 Des ...

  7. (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)

    前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...

  8. 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)

    洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...

  9. 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)

    洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...

随机推荐

  1. Linux FTP YUM源搭建简单记录

    1. 挂载iso镜像,进入Packages目录下安装FTP服务 #rpm -ivh vsftpd-3.0.2-10.el7.x86_64.rpm 2. 修改vsftpd配置文件如下 [root@rus ...

  2. JavaScript回调函数的理解

    这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> < ...

  3. spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法

    spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法 类的公共方法可以,但是私有方法不行 测试一下接口的方法是否能够捕捉到

  4. Mysql 列转行group_concat函数,与行转列

    1.正常情况. SELECT JoinEventIds from nt_mainnum 2.使用group_concat函数 select group_concat(JoinEventIds) fro ...

  5. Sqlite 错误码

    #define SQLITE_OK 0 /* 成功 | Successful result */ /* 错误码开始 */ #define SQLITE_ERROR 1 /* SQL错误 或 丢失数据库 ...

  6. Shell 脚本编程笔记(一) Hello Shell

    最近不断在接触Linux操作系统,对它一个终端走天下的特性感到十分新奇和伟大.同时也被各种命令折磨的死去活来...公司的一个老同事给我讲,在公司的极品geek宅都是只用一个黑黑的框完成一切的.结果我一 ...

  7. 【BZOJ1010】玩具装箱

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  8. C#:装箱和拆箱相关知识整理

    1.装箱和拆箱是一个抽象的概念   2. 装箱是将值类型转换为引用类型 ;   拆箱是将引用类型转换为值类型   利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型 ...

  9. ExtJS智能提示工具spket安装与破解

    用myeclipse写java程序,最怕的是什么呢,写javascript代码,原因很简单,没有智能提示,ExtJS是完全js代码的界面库,写起来就更痛苦了,幸好有人做了spket插件,此文采用傻瓜式 ...

  10. Android学习----打印日志Log

    Log.v(tag,msg);所有内容 Log.d(tag,msg);debug Log.i(tag,msg);一般信息 Log.w(tag,msg);警告信息 Log.e(tag,msg);错误信息 ...