Project Euler #1: Multiples of 3 and 5
Читать на Русском
Problem Statement on HackerRank ProjectEuler+. This problem is a programming version of problem #1 from ProjectEuler.
Given a positive integer n. Find the sum of all positive integers below n that are multiples of 3 or 5.
Input format
First line contains t (1 ≤ t ≤ 10000) that denotes the number of test cases. Each of the following t lines contains single integer n (1 ≤ n ≤ 10000).
Output format
For every n print the sum of all positive integers below n that are multiples of 3 or 5.
Status: Accepted
Lets sum all integers below n that are multiples of 3, after it lets add to them all integers below n that are multiples of 5. From this sum we should subtract all integers below n that are multiples of 15 because we have already counted them twice.
Solution
Note that the number of multiples of 3 below n, is equal to the partial quotients by dividing n-1 by 3. For calculating the sum we can use the formula of the sum of first k numbers in an arithmetic progression, where k is (n-1)/3.
The following code will count the sum for multiples of three:
The following code will count the sum for multiples of three:
int k = (n-1)/3; sum = ((3 + k*3)*k)/2;or
int k = (n-1)/3; sum = 3*(k+1)*k/2;
Just add a simillar code for 5 и 15. Also don`t forget a about possible integer overflow. The final code:
int t, n, c;
cin >> t;
long long sum;
for (int i = 0; i < t; ++i) {
cin >> n;
sum = 0;
n--;
c = n/3;
sum += 3ll*(c+1)*c/2;
c = n/5;
sum += 5ll*(c+1)*c/2;
c = n/15;
sum -= 15ll*(c+1)*c/2;
cout << sum << "\n";
}
No comments:
Post a Comment