数学入门题


【最大公约数和最小公倍数】


输入两个整数G,L,找出两个正整数a和b,使得二者的最大公约数为G,最小公倍数为L。如果有多解,输出a<=b且a最小的解。无解输出-1。


由唯一分解定理,最小的a为最大公约数G,b为最小公倍数L,若L%G!=0则无解。


【最小公倍数】


输入两个整数A和C,求最小的整数B使得lcm(A,B)=C。如果无解,输出NO SOLUTION。


对A与C进行素因子分解。



若 e_i > f_i 则无解,若 e_i < f_i 则B中必然存在因子P_i^{f_i}。若 e_i = f_i,则B中必须无该因子才能有最小值。


【全加和】


把K个不超过N的非负整数加起来,使得他们的和为N,有多少种方法?


令f[K][N]为将K个不超过N的非负整数加起来使他们和为N的方法数。

状态转移方程f[i][j]=sum(f[i-1][k](0<=k<=j))


【幂的阶乘】


输入两个数n和m,求最大的整数k使得m^k是n!的约数。



对n!和m进行素因子分解。

若m有P^e,而n!有P^f,若e>f 则无解,否则k=min(k,f/e)


【LCM的个数】


输入正整数n,统计有多少对正整数a<=b,满足lcm(a,b)=n。


对n进行素因子分解,对于一个P^e,有a取P^e,b取P^{0~e-1};a取P^{0~e-1},b取P^e;a取P^e,b取P^e,三种情况。

由乘法原理得,ans=sum(2*num[i]+1)。由a<=b,ans=ceil(ans/2)。


【排列之和】


输入n个数字,这些数字的任何一种排列都是一个整数。求出所有这些整数之和。


易知数字在每一位的出现次数相同。令f[i]为数字i在序列中出现的次数,则(n-1)!/(f[0]!*f[1]!*..*(f[i]-1)!*...*f[9])*i为数字i在同一位上出现的次数。


【组队】


有n个人,选一个或多个人参加比赛,其中一名当队长,有多少种方案?如果参赛者完全相同,但队长不同,算作不同方案。



【整数游戏】


给出一个数字串N,两个人轮流从中取出一个数字,要求每次取完之后剩下的数和是3的倍数,不能取数者输。如果两个游戏者都足够聪明,谁会获胜?


令当前的数字和为S,第一次取时,若序列中不存在一个数字A%3=S%3,则先手必输。

若存在,先手取走A,则此时的S是3的倍数,看剩余序列中有多少个数是3的倍数,若为奇数,则后手胜,偶数则先手胜。


【和最小的LCM】


输入正整数n,找到至少两个正整数,使得它们的LCM为n,并且和最小。


对n素因子分解,

显然P1^e1, P2^e2, ... , Pn^en的LCM为n,若要和最小,只要将其相加即可。

注意n=1的情况,由于要求至少两个正整数,所以还要加上一个1。


【完全平方数】


如果一个数可以写成一个整数的平方,则说它是一个完全平方数。输入正整数a,b,有多少个完全平方数介于a和b之间?


水水水水水





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值