ABC 253

您所在的位置:网站首页 1是不是10的倍数怎么算 ABC 253

ABC 253

2024-07-09 17:03| 来源: 网络整理| 查看: 265

链接如下

D - FizzBuzz Sum Hard

题意:求1 ~ n中既不是a的倍数也不是b的倍数之和。

题解:正难则反,求不是倍数的和可能比较麻烦,但是求是a和b的倍数好解,于是应用容斥原理,用

1 ~ n的总和 - a的倍数的和 - b的倍数的和 + a与b的倍数的和,则为答案

这里倍数的和可以用等差数列求解,因为不大于n的a的倍数有 n / a个,第一项为a,最后一项为(a * (n / a)).

所以设有 t  = n / a项,那么a的倍数之和就等于 (a + a * t)* t / 2,提公因数得,(1 + t) * t * a / 2

代码如下

#include using namespace std; long long n; long long f(long long t) { long long sum = (1 + t) * t / 2; return sum; } int main(void) { long long a, b; cin >> n >> a >> b; long long sum = (1 + n) * n / 2;//~n的和 long long as = f(n / a) * a;//a的倍数和 long long bs = f(n / b) * b;//b的倍数和 long long ans = sum - as - bs; long long lcm = a * b / __gcd(a,b);//a与b的倍数和 if(lcm


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3