tokyo regional F - Find the Multiples

先讲大概的题意:给你一个0-9的序列,和一个素数Q。序列的任意一个部分拿出来可以当作十进制的数来进行读,要求是不能含有前缀0的正整数。现在问你这样的序列有多少个?

一道在原本应该在能力范围内的题目,由于思维固化,没有用科学的方法正反向去证明,最后没有解出来,看到别人的代码后恍然大物,原来还是那种区间统计的思想,只是加上了一点小小的数论推导罢了。当然充分性是显然满足的,当时也想到了,必要性没有想到。认真分析了以下,用反证法的确很容易证明出来。具体分析见下面:

1.首先此题是有原型的,先讲一下他的母亲那一题。题意也是给你一个0-9的数字序列和一个素数,问你其中有多少个序列满足他们的数字之和能被这个模数整除。我们的解法是很简单的,就是从开始统计他们的sum%mod的值,如果其中出现两个的模数是相等的。那么他们之差所对应的序列的和模mod便是0,当是或许简单一想就会想的很明白。其实应该有一个充分性和必要性的证明的。由于那里忽略的,直接导致这题,在必要性没有证明的前提下就直接否决了。

2。回归到此题,同样的思路,只是只是多了点小小的数论推导罢了。

(1)如果Q(被模数)不能被10整除即不是2或5,那么num[i][j-1] % Q=0(i<j) 当且仅当num[i]%Q=num[j]%Q

  证明:

必要性:由 num[i]%Q=num[j]%Q => (num[i]-num[j])%Q=0

                又 num[i]=num[j]+num[i][j-1]*10^(N-j)

                得到:

                num[i][j-1]*10^(N-j) % Q=0

                由于Q不含2,5因子,因此num[i][j-1]%!=0

所以必要性得证;

充分性:显然,倒着写就行了。

(2)如果Q是2或则5,该序列能被Q整除等价于个位数能被Q整除

  证明:显然。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值