zoj 1133 Smith Numbers

一道比较简单的题目,题目意思比较明确,没必要多解释。但是我读题的时候还是着急了点,中间的一段直接忽略的,导致没有看到素数的影响,浪费了不少时间。

寻找Smith Number基本上就是寻找素数的方法,使用试除法,比较简单。也就是用素数不断的除啊除,除到差不多了就可以搞定了。题目的主要难点在于时间,有可能会超时。做题前建议先看看status,这样可以发现TLE的比较多,一般这道题目就是需要做好时间优化。好了贴下代码,结合代码说说我的解法。

 

代码有点搓,看起来不是很顺眼。不过诸位看懂应该没什么问题的。

首先我的想法是输入的数值最大就是99999999,而试除法上限是sqrt(n),所以大概10001就够了。我首先计算了小于10002的所有数字的素数性质和Smith值。然后对于要判断的数字,如果小于10002就直接判断,如果大于就进行试除,这里可以采用很多的循环方式,比如:for i =2 to 10001, for i=10001 to 2, for i=prime[0] to prime[tagend], for i=prime[tagend] to prime[0]。通过尝试,发现上面代码中的方式是最快的,当然其他方式都能AC。

好了,其他也没什么好说的,写的时候小心点就好了,我还是WA了n次才搞定的,不够谨慎啊不够谨慎。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值