整 数

数学归纳法(非常有用的证明方法)

数学归纳原理(弱归纳)

一个包含整数 1 1 1 的正整数集合如果具有以下性质,即若其包含整数 k k k ,则其也包含整数 k + 1 k+1 k+1,那么这个集合一定是所有正整数的集合。

高考要考的。

举个栗子,证明:
∑ i = 1 n i 2 = n ( n + 1 ) ( n + 2 ) 6 \sum_{i=1}^{n} i^{2}=\frac{n(n+1)(n+2)}{6} i=1ni2=6n(n+1)(n+2)

  • n = 1 n=1 n=1 代入得 ∑ i = 1 1 i 2 = 1 \sum_{i=1}^{1} i^{2} = 1 i=11i2=1,结论显然成立。

  • 假设公式对于 n n n 成立,即 ∑ i = 1 n i 2 = n ( n + 1 ) ( 2 n + 1 ) 6 \sum_{i=1}^{n} i^{2}=\frac{n(n+1)(2n+1)}{6} i=1ni2=6n(n+1)(2n+1) 成立,根据归纳假设有:

∑ i = 1 n + 1 j 2 = n ( n + 1 ) ( 2 n + 1 ) 6 + ( n + 1 ) 2    把 i = n + 1 项 分 离 出 来 = n ( n + 1 ) ( 2 n + 1 ) + 6 ( n + 1 ) 2 6 = ( n + 1 ) ( 2 n 2 + 7 n + 6 ) 6 = ( n + 1 ) ( n + 2 ) ( 2 n + 3 ) 6 \begin{aligned} \sum_{i=1}^{n+1} j^{2}&=\frac{n(n+1)(2n+1)}{6} +(n+1)^2\ \ 把i=n+1项分离出来 \\ &=\frac{n(n+1)(2n+1)+6(n+1)^2}{6} \\ &=\frac{(n+1)(2n^2+7n+6)}{6} \\ &=\frac{(n+1)(n+2)(2n+3)}{6} \\ \end{aligned} i=1n+1j2=6n(n+1)(2n+1)+(n+1)2  i=n+1=6n(n+1)(2n+1)+6(n+1)2=6(n+1)(2n2+7n+6)=6(n+1)(n+2)(2n+3)

则结论成立。

第二数学归纳原理(强归纳)

对于包含 1 1 1 的正整数集合,如果它具有下述性质:

对于每一个正整数 n n n ,如果它包含全体正整数 1 , 2 , ⋅ ⋅ ⋅ , n 1,2,···,n 1,2,,n ,则它也包含正整数 n + 1 n+1 n+1

那么这个集合一定是由所有正整数的集合。

斐波那契数

定义:    f 1 = 1 ,    f 2 = 1 ,    且 对 n ≥ 3 , 有 :    f n = f n − 1 + f n − 2 \ \ f_{1}=1,\ \ f_{2}=1,\ \ 且对n\ge 3,有:\ \ f_{n}=f_{n-1}+f_{n-2}   f1=1,  f2=1,  n3,:  fn=fn1+fn2

结论1: ∑ i = 1 n f i   =   f n + 2 − 1 \sum_{i=1}^{n}f_{i}\ =\ f_{n+2}-1 i=1nfi = fn+21

证明如下:

根据定义可知:

∑ i = 1 n f k = ∑ i = 1 n ( f k + 2 − f k + 1 ) \sum_{i=1}^{n}f_{k}=\sum_{i=1}^{n}(f_{k+2}-f_{k+1}) i=1nfk=i=1n(fk+2fk+1)

把等式右边展开很容易消掉。

就可以得到结论。

当然,也可以通过数学归纳法进行证明,这里不再赘述。

结论2: 斐波那契数列比公比为 α = 1 + 5 2 \alpha =\frac{1+\sqrt[]{5}}{2} α=21+5 的等比数列增长得快。

可用第二数学归纳法,证明 n ≥ 3 时 , 有    f n > α n − 2 n\ge 3时,有\ \ f_{n}>\alpha^{n-2} n3  fn>αn2:

  • 通过计算可得,该不等式对于 n = 3 , 4 n=3,4 n=3,4 时成立。
  • 假设对于 k ≤ n k\le n kn 的所有整数 k k k 该不等式成立。因为 α 2 = α + 1 \alpha^2=\alpha+1 α2=α+1
    则有 :
    α n − 1 = α 2 ∗ α n − 3 = ( α + 1 ) ∗ α n − 3 = α n − 2 + α n − 3 \begin{aligned} \alpha^{n-1}&=\alpha^2*\alpha^{n-3}\\ &=(\alpha+1)*\alpha^{n-3}\\ &=\alpha^{n-2}+\alpha^{n-3}\\ \end{aligned} αn1=α2αn3=(α+1)αn3=αn2+αn3
    根据假设,可知
    f n > α n − 2        f n − 1 > α n − 3 f_{n}>\alpha^{n-2}\ \ \ \ \ \ f_{n-1}>\alpha^{n-3} fn>αn2      fn1>αn3
    故:
    f n + 1 = f n + f n − 1 > α n − 2 + α n − 3 = α n − 1 f_{n+1}=f_{n}+f_{n-1}>\alpha^{n-2}+\alpha^{n-3}=\alpha^{n-1} fn+1=fn+fn1>αn2+αn3=αn1

证毕.

结论3:设 n n n 为正整数 α = 1 + 5 2     β = 1 − 5 2 \alpha=\frac{1+\sqrt[]{5}}{2}\ \ \ \beta=\frac{1-\sqrt[]{5}}{2} α=21+5    β=215 ,则有:

f n = α n − β n 5 f_{n}=\frac{\alpha^n-\beta^n}{\sqrt[]{5}} fn=5 αnβn

用高中学的特征根法可证。

还有亿些性质请读者自行探索。

整除

定义: 如果 a a a , b b b 为整数且 a ≠ 0 a\ne 0 a=0 ,我们说 a a a 整除 b b b 是指存在整数 c c c 使得 b = a c . b=ac. b=ac. 如果 a a a 整除 b b b ,我们还称 a a a b b b 的一个因子,且称 b b b a a a 的倍数.

如果 a a a整除 b b b,记为 a ∣ b a\mid b ab ,如果 a a a不能整除 b b b,记为 a ∤ b a\nmid b ab

废话

整除的简单性质:
  • 如果 a , b , c a,b,c a,b,c 为整数,且 a ∣ b , b ∣ c a\mid b,b\mid c ab,bc ,则有 a ∣ c a\mid c ac.
  • 如果 a , b , c , n , m a,b,c,n,m a,b,c,n,m 为整数且 c ∣ a , c ∣ b c\mid a,c\mid b ca,cb,则有 c ∣ ( n a + m b ) c\mid (na+mb) c(na+mb)

[USACO08DEC]Patting Heads S

给你 n n n 个数 a 1 , a 2 ⋅ ⋅ ⋅ a n a_{1},a_{2}···a_{n} a1,a2an,询问对于每一个 a i a_{i} ai 在数列中有多少数能被 a i a_{i} ai整除。

题解: 本题值域很小,可以根据元素的值建立映射关系,同时统计值域中对于每一个整数的答案,最后输出答案即可。

#include<bits/stdc++.h>
#define N 1000005
using namespace std;

int n,a[N],mp[N],ans[N];

inline int qr()
{
	char a=0;int w=1,x=0;
	while(a<'0'||a>'9'){if(a=='-')w=-1;a=getchar();}
	while(a<='9'&&a>='0'){x=(x<<3)+(x<<1)+(a^48);a=getchar();}
	return x*w;
}

int main()
{
	n=qr();
	int maxn=0;
	for(register int i=1;i<=n;i++)
	{
		mp[a[i]=qr()]++;
		maxn=max(maxn,a[i]);
	}
	for(register int i=1;i<=maxn;i++)
	{
		if(mp[i])
			ans[i]+=mp[i]-1;
		for(register int j=i*2;j<=maxn;j+=i)
			ans[j]+=mp[i];
	}
	for(register int i=1;i<=n;i++)
		printf("%d\n",ans[a[i]]);
	return 0;
}
整除分块

[CQOI2007]余数求和

∑ i = 1 n k    m o d    i \sum_{i=1}^{n}k\ \ mod\ \ i i=1nk  mod  i.

题解:

显然, k   m o d   i = k − ⌊ k i ⌋ k\ mod\ i=k-\lfloor \frac{k}{i} \rfloor k mod i=kik

要求的柿子转化为 ∑ i = 1 n ( k − ⌊ k i ⌋ ) = n k − ∑ i = 1 n ⌊ k i ⌋ \sum_{i=1}^{n}(k-\lfloor \frac{k}{i} \rfloor)=nk-\sum_{i=1}^{n}\lfloor \frac{k}{i} \rfloor i=1n(kik)=nki=1nik

⌊ k i ⌋ \lfloor \frac{k}{i} \rfloor ik 的不同取值数量小于 2   n 2\ \sqrt[]{n} 2 n 种,理由如下:

[   1   ,   n   ] [\ 1\ ,\ n\ ] [ 1 , n ] 分为两部分 [   1   ,   n   ] [\ 1\ ,\ \sqrt[]{n}\ ] [ 1 , n  ] (   n   ,   n   ] (\ \sqrt[]{n}\ ,\ n\ ] ( n  , n ].

  • 对于 i ∈ [   1   ,   n   ] i\in [\ 1\ ,\ \sqrt[]{n}\ ] i[ 1 , n  ] , ⌊ k i ⌋ \lfloor \frac{k}{i} \rfloor ik 最多有   n \ \sqrt[]{n}  n 种取值。
  • 对于 i ∈ (   n   ,   n   ] i\in (\ \sqrt[]{n}\ ,\ n\ ] i( n  , n ] , ⌊ k i ⌋ \lfloor \frac{k}{i} \rfloor ik 值域为 [   1   ,   n   ) [\ 1\ ,\ \sqrt[]{n}\ ) [ 1 , n  ) , 故最多有   n − 1 \ \sqrt[]{n}-1  n 1 种取值。

综上: ⌊ k i ⌋ \lfloor \frac{k}{i} \rfloor ik 的不同取值数量小于 2   n 2\ \sqrt[]{n} 2 n 种.

接下来要求出块的左右端点:

结论: 当有 ⌊ k l ⌋ = ⌊ k r ⌋ \lfloor \frac{k}{l} \rfloor=\lfloor \frac{k}{r} \rfloor lk=rk 时, r r r 的最大取值为 ⌊ k ⌊ k l ⌋ ⌋ \lfloor \frac{k}{ \lfloor \frac{k}{l} \rfloor} \rfloor lkk ,自己证

之后就可以通过 l , r l,r l,r 不断迭代的方式通过本题。

#include<bits/stdc++.h>
#define LL long long 
using namespace std;

LL n,k,ans;

inline int qr()
{
	int w=1,x=0;char a=0;
	while(a<'0'||a>'9'){if(a=='-')w=-1;a=getchar();}
	while(a<='9'&&a>='0'){x=(x<<3)+(x<<1)+(a^48);a=getchar();}
	return x*w;
}

int main()
{
	n=qr();
	k=qr();
	ans=n*k;
	LL l=1,r=0;
	while(l<=n)
	{
		r= k/l!=0?min((k/(k/l)),n):n;
		ans-=(r+l)*(k/l)*(r-l+1)/2;
		l=r+1;
	}
	printf("%lld\n",ans);
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值