您的位置:首页 > 其它

数学几个有趣的题目

2013-08-13 10:29 204 查看
BZOJ 2876 [Noi2012]骑行川藏

在约束∑(K_i * S_i * (V_i-V_i')^2 <= Eu下,求∑S_i / V_i的最大值

拉格朗日乘数法。具体百度。。。

BZOJ 1053 [HAOI2007]反素数ant

求反素数

分析:

根据乘法原理,n的因子数为(p1+1)*(p2+1)*...

所以可以使用递归的形式找到不大于n的反素数,另外想要使得数目

最多,所以必须使得素数因子最小的数目最多(可增加一剪枝使得

搜索更快)。

sgu 126 Boxes

有两个箱子,分别有a,b个球,现在从一个箱子往另一个箱子移动球,每次移动只能够是另一个箱子球的个数,问能不能够使得其中一个箱子空。

分析:我们可以从(0,n)往前面推,发现gcd(a,b)跟(a,b)的状态是一样的。所以

我们可以先对(a,b)分别除掉他们的最大公约数,然后判断a+b是否是2^k形式即可

BZOJ 1257 [CQOI2007]余数之和sum

给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数

分块计算。

k%n = k-k/n,所以sum = n*m-sigma(k/i *i)

k/i可以分成区间[ i,k/(k/i) ),在这个区间内的所有k/i值相等。所以可以划分为

一个区间的等差数列来做

HOJ 2446 Cellular Automaton

在一个环中有n个格子,每个格子的值为ai,距离该格子不足d的所有格子的和对于m取余为新的值,问第k次变换后的所有n个格子的值

很容易可以构造出一个循环的矩阵出来,但是如果是O(n^3*logn)会TLE。我们可以注意到循环矩阵a * b只需要计算a的第一行*b,然后下面的移位均可以得到。时间为O(n^2*logn)

poj 3318 Matrix Multiplication

判断矩阵a * b == c

方法一:

O(n^3)算法提示会TLE,但是原矩阵是一个稀疏矩阵,所以可

以在相乘的时候判断是否为0,这样同样不会TLE~~

方法二:

压缩矩阵,左乘1*n的矩阵,使得左边以及右边都变成1*n的

矩阵,然后两边判断是否相等就行了~~但是如果这样压缩的话,

不保证每个元素的特性,所以这个1*n的矩阵得要体现特性,构

造的时候可以取随机数,或者令(1,2...n)

sgu 196 Matrix Multiplication

给出无向图边的关系,转化为邻接矩阵A,求A* X A,A*表示转置矩阵

无向图转化为矩阵之后,A* = A

假设B[i,j] = sigma_k ( A[i,k]*A[k,j] )

ans = sigma_i ( sigma_j ( B[i,j] ) )

= sigma_i ( sigma_j ( sigma_k( A[i,k]*A[k,j] )))

= sigma_k ( sigma_i(A[i,k]) * sigma(B[k,j]))

BZOJ 1045 [HAOI2008] 糖果传递

有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1,求使所有人获得均等糖果的最小代价。

* 分析:

* 假设a1分给an的糖果数为k,则可以得到以下的信息:

* a1 a2 a3 a4... an-1 an

* 当前数目:a1-k a2 a3 a4 an-1 an+k

* 所需代价:|a1-k-ave| |a1+a2-k-2*ave| |a1+a2+a3-k-3*ave| |a1+..+a(n-1)-k-(n-1)*ave| |k|

* 以sum[i]表示从a1加到ai减掉i*ave的和值,这以上可以化简为

* 总代价 = |s1-k|+|s2-k|+...+|s(n-1)-k|+|k|

* 不难看出:当k为s1...s(n-1)中的中位数的时候,所需的代价最小

积性函数

poj 1845 Sumdiv

求a^b所有约数的和

积性函数

预备知识:

1.对a进行素数约数分解

a = p1^k1 * p2^k2...pm^km

2.a^b的所有约数之和

sum = [ 1+p1+...+p1^k1 ]*...*[ 1+pm+pm^2+...+pm^km ]

3.等比数列求和

1+p+p^2+...+p^n

经典类型。递归二分然后快速幂取模

poj 3604 Professor Ben

求n的所有约数个数的立方和

g(n) = sigma( f(d) ),d|n

g(n)为积性函数,即g(n*m) = g(n)*g(m)

所以我们可以对n进行质因数分解

n = p1^k1 * ... * pm^km

然后g(n) = PI( f(p1^k1) )

容易得到

f(p^k)的约数有1,p,p^2....p^k,约数个数为k+1

即f(p^k) = 1+2+...+(1+k)

问题解决。。

poj 2480 Longge's problem 经典积性函数

求sigma( gcd(i,n) )

gcd(i,n) = gcd(i,a*b) = gcd(i,a)*gcd(i,b)

所以gcd是一个积性函数。

积性函数的和还是积性函数。

所以

f(n) = sigma( gcd(i,n) )也是积性函数

f(n) = f(p1^k1 * ... * pm^km) = f(p1^k1) * f(p2^k2) *...* f(pm^km)

又因为

f(n) = sigma( d* phi(n/d) ),i = d|n

所以可以化为

f(p^k) = sigma( p^i * phi( p^(k-i) ) )



phi(p^k) = p^k-p^(k-1)

所以问题得以解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: