C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++でA%X=BとなるようなXのすべての可能な値のカウント


2つの整数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

  1. C ++で(x%k)*(x / k)==nとなるような最小のxを見つけます

    2つの正の整数nとkが与えられ、(x%k)*(x / k)がnと同じになるように、正の整数xを見つける必要があります。したがって、nとkがそれぞれ4と6の場合、出力は10になります。したがって、(10%6)*(10/6)=4です。 x%kの値は[1からk – 1]の範囲にあることがわかっているので(0は含まれません)ここで、nを除算する範囲で可能な整数を見つけるため、与えられた方程式は次のようになります。 * k)/(x%k)+(x%k) 例 #include<iostream> using namespace std; int minValue(int x, int y){ &

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;