突然想到一道简单题,但也有深意!!

  给出一个 n <= 10亿 ,求出在 1 ~ n 范围内能被 3 或 5 整除的数的和 !!!!!运行时间 <= 2 s 内。

第一种解法,费时:
long long sum = 0 ;for (int k = 1; k <= n; k++) {if (k%3 == 0 || k%5 == 0) {sum += k ;}}printf(" %lld\n", sum);


第二种解法,高效:
 long long sum = 0 ;for (int i = 1; i*3 <= n ; i++) {if (i % 5 != 0 ) {sum += i*3 ;}if (i*5 <= n) {sum += i*5 ;}}

第三种数学集合解法,更高效:
 long long n = 1000000000 ;long long sum = 0 , k3 , k5 , k15 , m3 , m5 , m15 ;k3 = n / 3 ;k5 = n / 5 ;k15 = n / 15 ;m3 = 3 * k3 * (k3 + 1) / 2 ;m5 = 5 * k5 * (k5 + 1) / 2 ;m15 = 15 * k15 * (k15 + 1) / 2 ;sum = m3 + m5 - m15 ;




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部