数论题4例

数论题4例:

Uva12169不爽的裁判:

这道题是一道比较好的数论题罢。额,一开始真心没思路。很明显最开始的想法就是暴搜a和b,然后的话发现会超,于是看看能不能优化咯。发现暴搜a之后可以通过联立关系式求出b然后基本就Ok,主要是要公式推导一下。一开始真笨啊。。。想到中国剩余定理去了,推导其实不难,就是带入则个就好了。

X2=(ax1+b)%mod,x3=(ax2+b)%mod

则x3=(a(ax1+b)+b)%mod=(a*a*x1+a*b+b)%mod=(a*a*x1+b*(a+1))%mod

然后就变式成x3+k*mod=a*a*x1+b*(a+1)->b*(a+1)-k*mod=x3-a*a*x1扩展欧几里得一下就可以了

Uva10375:

比较裸的一道唯一分解定理,直接构造素数表,一个个质因数分解,化乘除为加减就可以了。注意最后一步要边乘边除否则会爆盏。

Uva最小公倍数的最小和

这题要稍微转化一下。最小公倍数为n,要分解成好几个数使得和最小。首先考虑

a>=b+a/b(b|a)这里证明一下,首先明显1是不管的,则每一个数都大于等于二,意味a/b<=a/2而b因为是a的因数(不等于a),所以b<=sqrt(a)<=a/2所以有上式

考虑到此,分就一定比不分解更好。怎么样才能分得最“彻底”而满足最小公倍数呢,那么不难证明,如果设n=a*d(a、d互质),那么n可以直接分解成a和d,而假设a=b*c(b,c≠1),b、c不互质,即gcd(b,c)!=1,则a=b*c/gcd(b,c)再令b’=b/gcd,c’=c/gcd,此时b’、c’、gcd分别互质,则a=b’*c’*gcd;此时a就被分解得更多了,所以一定更优,对于d也一样,分解出之后再次分解,然后最后得出的所有数都互质,就可以了。

额。。。证明的比较麻烦,然后就直接使用唯一分解定理了。

还有,细节比较多,首先质数要+1,其次是一个数的n次方的数的数要记得它只会被分解成一个数,所以要特判,还要+1,其他就没啥了。

Uva12716:

这题一开始我是从类比扩展欧几里得的角度去考虑的,然而失败了。。。。这也是我最近做题不好的一点,老是只会使用一种方法。。。

然后捏,先来分析题目,题目输入数据只有一个n,而且输出也只有一个,而且n还小,所以的话,肯定可以交表!

既然可以交表,那么就要构造表,我当时真是傻,直接打几组数据找个规律不就行了。。。这也是竞赛的时候的一种方法吧。。

至于正解,真心想不到,作为一个数论蒟蒻,我还是乖乖打表看数据吧。。。下面贴证明,表在意。。

A-B >= A%B >= gcd(A, B)

A xor B >= A-B

所以说A xor B >= A-B >= gcd(A, B),然后就可以推出 

A xor B = A - B = gcd(A, B) =>    A xor B = A - B  && A - B = gcd(A, B)

设 C = gcd(A, B),那么我们可以枚举C和A,通过A-C求出B,再验证A xor B 是否等于C即可

这里的枚举是仿照筛素数的方法,对于每一个A,我们求出一共有多少C满足条件,记为ans[A],那么最后只需要累加一下就可以。

好嘞搞定下面是数论题目总结

总结:

数论题解题的一般方法:

①  先对题目进行分析和理解,进行一定的转化后转化成自己已知的算法,目前已知的算法有:(当然是我这只蒟蒻懂的啦)

(1)    唯一分解定理

(2)    素数筛选法

(3)    欧几里得

(4)    扩展欧几里得

(5)    中国剩余定理

②  适当结合一些暴搜的手段,有时候其实只是插在题目之中做为一个小小优化而已,让程序跑得快一些。

③  注意考虑问题逻辑的全面性,注意有没有特解,特殊情况

④  数学功底。。(最没办法的。。慢慢练吧)

就到这了。膜拜下各位大神咯,加油

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值