Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 A % X =B인 X의 가능한 모든 값의 개수

<시간/>

두 개의 정수 A와 B와 숫자 X가 주어집니다. 목표는 A%X=B가 되도록 X가 가질 수 있는 값의 개수를 찾는 것입니다. 위 방정식의 경우 A==B이면 X의 무한한 값이 가능하므로 -1을 반환합니다. A B이면 결과로 (AB)의 제수 개수를 반환합니다.

예를 들어

입력

A=5, B=2

출력

Count of all possible values of X such that A % X = B are: 1

설명

5%3=2. So X is 3 here.

입력

A=10, B=10

출력

Count of all possible values of X such that A % X = B are: −1

설명

Here A==B so there are infinite solutions so −1 is returned.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근법에서 우리는 i=1에서 i*i<=(A-B)까지 for 루프를 사용하여 (A-B)의 제수를 계산할 것입니다. i가 완전히 나누어지면(A-B) 그에 따라 개수를 업데이트합니다.

  • 정수 A와 B를 입력으로 받습니다.

  • A

  • A==B이면 결과로 -1을 인쇄합니다.

  • A>B의 경우, possible_values(int A, int B) 함수는 A와 B를 취하고 A % X =B가 되도록 X의 가능한 모든 값의 개수를 반환합니다.

  • 초기 카운트를 0 및 X=A−B로 취합니다.

  • X의 제수를 계산하기 위해 i=1에서 i*i<(A−B)까지 for 루프를 사용하여 순회합니다.

  • i가 X를 완전히 나누면 temp=i, temp_2=B−1을 취하고 i*i!=X이면 temp_2 =X / i를 설정합니다.

  • temp> B 및 temp_2>B이면 카운트를 증가시킵니다.

  • 루프가 끝나면 결과로 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int possible_values(int A, int B){
   int count = 0;
   int X = A − B;
   for (int i = 1; i * i <= A − B; i++){
      if(X % i == 0){
         int temp = i;
         int temp_2 = B − 1;
         if(i * i != X){
            temp_2 = X / i;
         }
         if(temp > B){
            count++;
         }
         if(temp_2 > B){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int A = 15, B = 5;
   if(A < B){
      cout<<"Count of all possible values of X such that A % X = B are: "<<0;
   }
   else if(A == B){
      cout<<"Count of all possible values of X such that A % X = B are: "<<−1;
   }
   else{
      cout<<"Count of all possible values of X such that A % X = B are: "<<possible_values(A, B);
   }
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Count of all possible values of X such that A % X = B are: 1