给定三个数字A,B和M ,使得A ,任务是找到在[A,B]范围内被M整除的数字之和。
例子:
Input: A = 25, B = 100, M = 30
Output: 180
Explanation:
In the given range [25, 100] 30, 60 and 90 are the numbers which are divisible by M = 30
Therefore, sum of these numbers = 180.
Input: A = 6, B = 15, M = 3
Output: 42
Explanation:
In the given range [6, 15] 6, 9, 12 and 15 are the numbers which are divisible by M = 3.
Therefore, sum of these numbers = 42.
天真的方法:检查[A,B]范围内的每个数字是否可以被M整除。最后,加上所有可被M整除的数字。
下面是上述方法的实现:
C++
// C++ program to find the sum of numbers
// divisible by M in the given range
#include
using namespace std;
// Function to find the sum of numbers
// divisible by M in the given range
int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int sum = 0;
// Running a loop from A to B and check
// if a number is divisible by i.
for (int i = A; i <= B; i++)
// If the number is divisible,
// then add it to sum
if (i % M == 0)
sum += i;
// Return the sum
return sum;
}
// Driver code
int main()
{
// A and B define the range
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
cout << sumDivisibles(A, B, M) << endl;
return 0;
}
Java
// Java program to find the sum of numbers
// divisible by M in the given range
import java.util.*;
class GFG{
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int sum = 0;
// Running a loop from A to B and check
// if a number is divisible by i.
for (int i = A; i <= B; i++)
// If the number is divisible,
// then add it to sum
if (i % M == 0)
sum += i;
// Return the sum
return sum;
}
// Driver code
public static void main(String[] args)
{
// A and B define the range
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
System.out.print(sumDivisibles(A, B, M) +"\n");
}
}
// This code is contributed by 29AjayKumar
Python3
# Python 3 program to find the sum of numbers
# divisible by M in the given range
# Function to find the sum of numbers
# divisible by M in the given range
def sumDivisibles(A, B, M):
# Variable to store the sum
sum = 0
# Running a loop from A to B and check
# if a number is divisible by i.
for i in range(A, B + 1):
# If the number is divisible,
# then add it to sum
if (i % M == 0):
sum += i
# Return the sum
return sum
# Driver code
if __name__=="__main__":
# A and B define the range
# M is the dividend
A = 6
B = 15
M = 3
# Printing the result
print(sumDivisibles(A, B, M))
# This code is contributed by chitranayal
C#
// C# program to find the sum of numbers
// divisible by M in the given range
using System;
class GFG{
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int sum = 0;
// Running a loop from A to B and check
// if a number is divisible by i.
for (int i = A; i <= B; i++)
// If the number is divisible,
// then add it to sum
if (i % M == 0)
sum += i;
// Return the sum
return sum;
}
// Driver code
public static void Main(String[] args)
{
// A and B define the range
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
Console.Write(sumDivisibles(A, B, M) +"\n");
}
}
// This code is contributed by sapnasingh4991
Javascript
C++
// C++ program to find the sum of numbers
// divisible by M in the given range
#include
using namespace std;
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
int findSmallNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = N % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N - rem;
}
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
int findLargeNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = (N + K) % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N + K - rem;
}
// Function to find the sum of numbers
// divisible by M in the given range
int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int sum = 0;
int first = findSmallNum(A, M);
int last = findLargeNum(B, M);
// To bring the smallest and largest
// numbers in the range [A, B]
if (first < A)
first += M;
if (last > B)
first -= M;
// To count the number of terms in the AP
int n = (B / M) - (A - 1) / M;
// Sum of n terms of an AP
return n * (first + last) / 2;
}
// Driver code
int main()
{
// A and B define the range,
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
cout << sumDivisibles(A, B, M);
return 0;
}
Java
// Java program to find the sum of numbers
// divisible by M in the given range
class GFG{
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
static int findSmallNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = N % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N - rem;
}
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
static int findLargeNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = (N + K) % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N + K - rem;
}
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int first = findSmallNum(A, M);
int last = findLargeNum(B, M);
// To bring the smallest and largest
// numbers in the range [A, B]
if (first < A)
first += M;
if (last > B)
first -= M;
// To count the number of terms in the AP
int n = (B / M) - (A - 1) / M;
// Sum of n terms of an AP
return n * (first + last) / 2;
}
// Driver code
public static void main(String[] args)
{
// A and B define the range,
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
System.out.print(sumDivisibles(A, B, M));
}
}
// This code contributed by Princi Singh
Python3
# Python3 program to find the sum of numbers
# divisible by M in the given range
# Function to find the largest number
# smaller than or equal to N
# that is divisible by K
def findSmallNum(N, K):
# Finding the remainder when N is
# divided by K
rem = N % K
# If the remainder is 0, then the
# number itself is divisible by K
if (rem == 0):
return N
else:
# Else, then the difference between
# N and remainder is the largest number
# which is divisible by K
return N - rem
# Function to find the smallest number
# greater than or equal to N
# that is divisible by K
def findLargeNum(N, K):
# Finding the remainder when N is
# divided by K
rem = (N + K) % K
# If the remainder is 0, then the
# number itself is divisible by K
if (rem == 0):
return N
else:
# Else, then the difference between
# N and remainder is the largest number
# which is divisible by K
return N + K - rem
# Function to find the sum of numbers
# divisible by M in the given range
def sumDivisibles(A, B, M):
# Variable to store the sum
sum = 0
first = findSmallNum(A, M)
last = findLargeNum(B, M)
# To bring the smallest and largest
# numbers in the range [A, B]
if (first < A):
first += M
if (last > B):
first -= M
# To count the number of terms in the AP
n = (B // M) - (A - 1) // M
# Sum of n terms of an AP
return n * (first + last) // 2
# Driver code
if __name__ == '__main__':
# A and B define the range,
# M is the dividend
A = 6
B = 15
M = 3
# Printing the result
print(sumDivisibles(A, B, M))
# This code is contributed by Surendra_Gangwar
C#
// C# program to find the sum of numbers
// divisible by M in the given range
using System;
using System.Collections.Generic;
class GFG{
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
static int findSmallNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = N % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N - rem;
}
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
static int findLargeNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = (N + K) % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N + K - rem;
}
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int first = findSmallNum(A, M);
int last = findLargeNum(B, M);
// To bring the smallest and largest
// numbers in the range [A, B]
if (first < A)
first += M;
if (last > B)
first -= M;
// To count the number of terms in the AP
int n = (B / M) - (A - 1) / M;
// Sum of n terms of an AP
return n * (first + last) / 2;
}
// Driver code
public static void Main(String[] args)
{
// A and B define the range,
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
Console.Write(sumDivisibles(A, B, M));
}
}
// This code is contributed by Rajput-Ji
输出:
42
时间复杂度: O(N)。
高效的方法:想法是使用算术级数和除数的概念。
- 可视化后,可以看到M的倍数形成一个序列
M, 2M, 3M, ...
- 如果我们可以找到K的值,它是[A,B]范围内被M整除的第一项,那么直接得到的序列将是:
K, (K + M), (K + 2M), ------ (K + (N - 1)*M )
where N is the number of elements in the series.
- 因此,系列中的第一个术语“ K”不过是小于或等于A且可被M整除的最大数字。
- 类似地,最后一项是大于或等于B且可由M整除的最小数字。
- 但是,如果上述任何一个数字超出范围,那么我们可以直接从中减去M使其进入范围。
- 并且,可以通过以下公式找出可被M整除的项数:
N = B / M - (A - 1)/ M
- 因此,可以通过以下方式找出元素的总和:
sum = N * ( (first term + last term) / 2)
下面是上述方法的实现:
C++
// C++ program to find the sum of numbers
// divisible by M in the given range
#include
using namespace std;
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
int findSmallNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = N % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N - rem;
}
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
int findLargeNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = (N + K) % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N + K - rem;
}
// Function to find the sum of numbers
// divisible by M in the given range
int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int sum = 0;
int first = findSmallNum(A, M);
int last = findLargeNum(B, M);
// To bring the smallest and largest
// numbers in the range [A, B]
if (first < A)
first += M;
if (last > B)
first -= M;
// To count the number of terms in the AP
int n = (B / M) - (A - 1) / M;
// Sum of n terms of an AP
return n * (first + last) / 2;
}
// Driver code
int main()
{
// A and B define the range,
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
cout << sumDivisibles(A, B, M);
return 0;
}
Java
// Java program to find the sum of numbers
// divisible by M in the given range
class GFG{
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
static int findSmallNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = N % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N - rem;
}
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
static int findLargeNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = (N + K) % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N + K - rem;
}
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int first = findSmallNum(A, M);
int last = findLargeNum(B, M);
// To bring the smallest and largest
// numbers in the range [A, B]
if (first < A)
first += M;
if (last > B)
first -= M;
// To count the number of terms in the AP
int n = (B / M) - (A - 1) / M;
// Sum of n terms of an AP
return n * (first + last) / 2;
}
// Driver code
public static void main(String[] args)
{
// A and B define the range,
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
System.out.print(sumDivisibles(A, B, M));
}
}
// This code contributed by Princi Singh
Python3
# Python3 program to find the sum of numbers
# divisible by M in the given range
# Function to find the largest number
# smaller than or equal to N
# that is divisible by K
def findSmallNum(N, K):
# Finding the remainder when N is
# divided by K
rem = N % K
# If the remainder is 0, then the
# number itself is divisible by K
if (rem == 0):
return N
else:
# Else, then the difference between
# N and remainder is the largest number
# which is divisible by K
return N - rem
# Function to find the smallest number
# greater than or equal to N
# that is divisible by K
def findLargeNum(N, K):
# Finding the remainder when N is
# divided by K
rem = (N + K) % K
# If the remainder is 0, then the
# number itself is divisible by K
if (rem == 0):
return N
else:
# Else, then the difference between
# N and remainder is the largest number
# which is divisible by K
return N + K - rem
# Function to find the sum of numbers
# divisible by M in the given range
def sumDivisibles(A, B, M):
# Variable to store the sum
sum = 0
first = findSmallNum(A, M)
last = findLargeNum(B, M)
# To bring the smallest and largest
# numbers in the range [A, B]
if (first < A):
first += M
if (last > B):
first -= M
# To count the number of terms in the AP
n = (B // M) - (A - 1) // M
# Sum of n terms of an AP
return n * (first + last) // 2
# Driver code
if __name__ == '__main__':
# A and B define the range,
# M is the dividend
A = 6
B = 15
M = 3
# Printing the result
print(sumDivisibles(A, B, M))
# This code is contributed by Surendra_Gangwar
C#
// C# program to find the sum of numbers
// divisible by M in the given range
using System;
using System.Collections.Generic;
class GFG{
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
static int findSmallNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = N % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N - rem;
}
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
static int findLargeNum(int N, int K)
{
// Finding the remainder when N is
// divided by K
int rem = (N + K) % K;
// If the remainder is 0, then the
// number itself is divisible by K
if (rem == 0)
return N;
else
// Else, then the difference between
// N and remainder is the largest number
// which is divisible by K
return N + K - rem;
}
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
// Variable to store the sum
int first = findSmallNum(A, M);
int last = findLargeNum(B, M);
// To bring the smallest and largest
// numbers in the range [A, B]
if (first < A)
first += M;
if (last > B)
first -= M;
// To count the number of terms in the AP
int n = (B / M) - (A - 1) / M;
// Sum of n terms of an AP
return n * (first + last) / 2;
}
// Driver code
public static void Main(String[] args)
{
// A and B define the range,
// M is the dividend
int A = 6, B = 15, M = 3;
// Printing the result
Console.Write(sumDivisibles(A, B, M));
}
}
// This code is contributed by Rajput-Ji
输出:
42
时间复杂度: O(1)。