gpt4 book ai didi

c - 求 1000 以下所有 3 或 5 的倍数之和

转载 作者:太空狗 更新时间:2023-10-29 17:14:00 27 4
gpt4 key购买 nike

如果我们列出所有 10 以下的自然数,它们是 3 或 5 的倍数,我们得到 3、5、6 和 9。这些倍数的和是 23。我有以下代码,但答案不匹配。

#include<stdio.h>
int main()
{
long unsigned int i,sum=0;
clrscr();
for(i=0;i<=1000;i++)
{
if((i%5==0)||(i%3==0))
{
sum=sum+1;
}
}
printf("%d\n",sum);
getchar();
return 0;
}

最佳答案

与其使用基于范围/循环的解决方案,您可能希望更多地利用数学而不是蛮力。

有一种简单的方法可以得到一个数的倍数之和,小于一个数。

例如,3 到 1000 的倍数之和为:3 + 6 + 9 + ... + 999可以改写为:3* ( 1 + 2 + 3 + ... + 333)

有一种简单的方法可以对所有数字 1-N 求和:

Sum(1,N) = N*(N+1)/2

所以一个示例函数是

unsigned int unitSum(unsigned int n)
{
return (n*(n+1))/2;
}

所以现在求所有小于 1000 的 3 的倍数(也就是 999 以内)已经减少到:

3*unitSum((int)(999/3))

你可以对 5 的倍数做同样的事情:

5*unitSum((int)(999/5))

但有一个警告!这两个都计算两者的倍数,例如 15、30 等它对它们计数两次,每个计数一个。所以为了平衡它,你减去一次。

15*unitSum((int)(999/15))

所以总的来说,等式是:

sum = 3*unitSum((int)(999/3)) + 5*unitSum((int)(999/5)) - 15*unitSum((int)(999/15))

所以现在不是遍历大量数字并进行比较,而是进行一些简单的乘法运算!

关于c - 求 1000 以下所有 3 或 5 的倍数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com