Учитывая два числа A и B, задача состоит в том, чтобы найти сумму общих множителей двух чисел A и B. Числа A и B меньше 10 ^ 8.
Примеры:
Input: A = 10, B = 15
Output: Sum = 6
The common factors are 1, 5, so their sum is 6
Input: A = 100, B = 150
Output: Sum = 93
Наивный подход: итерируйте от i = 1 до минимума A и B и проверьте, является ли i фактором как A, так и B. Если i является фактором A и B, то прибавьте его к сумме. Показать сумму в конце цикла.
Ниже приведена реализация вышеуказанного подхода:
C ++
#include <bits/stdc++.h>
using namespace std;
int sum( int a, int b)
{
int sum = 0;
for ( int i = 1; i <= min(a, b); i++)
if (a % i == 0 && b % i == 0)
sum += i;
return sum;
}
int main()
{
int A = 10, B = 15;
cout << "Sum = " << sum(A, B) << endl;
return 0;
}
|
Джава
import java.io.*;
class GFG {
static int sum( int a, int b)
{
int sum = 0 ;
for ( int i = 1 ; i <= Math.min(a, b); i++)
if (a % i == 0 && b % i == 0 )
sum += i;
return sum;
}
public static void main (String[] args) {
int A = 10 , B = 15 ;
System.out.print( "Sum = " + sum(A, B));
}
}
|
Python 3
def sum (a, b):
sum = 0
for i in range ( 1 , min (a, b)):
if (a % i = = 0 and b % i = = 0 ):
sum + = i
return sum
A = 10
B = 15
print ( "Sum =" , sum (A, B))
|
C #
using System;
class GFG {
static int sum( int a, int b)
{
int sum = 0;
for ( int i = 1; i <= Math.Min(a, b); i++)
if (a % i == 0 && b % i == 0)
sum += i;
return sum;
}
public static void Main () {
int A = 10, B = 15;
Console.WriteLine( "Sum = " + sum(A, B));
}
}
|
PHP
<?php
function sum( $a , $b )
{
$sum = 0;
for ( $i = 1; $i <= min( $a , $b ); $i ++)
if ( $a % $i == 0 && $b % $i == 0)
$sum += $i ;
return $sum ;
}
$A = 10; $B = 15;
echo "Sum = " , sum( $A , $B );
?>
|
Выход:
Sum = 6
Эффективный подход заключается в использовании той же концепции, что и в общих делителях двух чисел . Вычислите наибольший общий делитель (gcd) из заданных двух чисел, а затем найдите сумму делителей этого gcd.
C ++
#include <bits/stdc++.h>
using namespace std;
int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
int sumcommDiv( int a, int b)
{
int n = gcd(a, b);
int sum = 0;
for ( int i = 1; i <= sqrt (n); i++) {
if (n % i == 0) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
int main()
{
int a = 10, b = 15;
cout << "Sum = " << sumcommDiv(a, b);
return 0;
}
|
Джава
import java.io.*;
class GFG {
static int gcd( int a, int b)
{
if (a == 0 )
return b;
return gcd(b % a, a);
}
static int sumcommDiv( int a, int b)
{
int n = gcd(a, b);
int sum = 0 ;
for ( int i = 1 ; i <= Math.sqrt(n); i++) {
if (n % i == 0 ) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
public static void main (String[] args) {
int a = 10 , b = 15 ;
System.out.println( "Sum = " + sumcommDiv(a, b));
}
}
|
python3
from math import gcd,sqrt
def sumcommDiv(a, b):
n = gcd(a, b)
sum = 0
N = int (sqrt(n)) + 1
for i in range ( 1 ,N, 1 ):
if (n % i = = 0 ):
if (n / i = = i):
sum + = i
else :
sum + = (n / i) + i
return sum
if __name__ = = '__main__' :
a = 10
b = 15
print ( "Sum =" , int (sumcommDiv(a, b)))
|
C #
using System;
public class GFG{
static int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
static int sumcommDiv( int a, int b)
{
int n = gcd(a, b);
int sum = 0;
for ( int i = 1; i <= Math.Sqrt(n); i++) {
if (n % i == 0) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
static public void Main (){
int a = 10, b = 15;
Console.WriteLine( "Sum = " + sumcommDiv(a, b));
}
}
|
PHP
<?php
function gcd( $a , $b )
{
if ( $a == 0)
return $b ;
return gcd( $b % $a , $a );
}
function sumcommDiv( $a , $b )
{
$n = gcd( $a , $b );
$sum = 0;
for ( $i = 1; $i <= sqrt( $n ); $i ++) {
if ( $n % $i == 0) {
if ( $n / $i == $i )
$sum += $i ;
else
$sum += ( $n / $i ) + $i ;
}
}
return $sum ;
}
$a = 10;
$b = 15;
echo "Sum = " , sumcommDiv( $a , $b );
?>
|
Выход:
Sum = 6
Рекомендуемые посты:
Сумма общих делителей двух чисел A и B
0.00 (0%) 0 votes