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

C / C ++のモジュラ方程式の解の数のプログラム?


ここでは、モジュラ方程式に関連する興味深い問題が1つあります。 2つの値AとBがあるとします。(Amod X)=Bが成り立つように、変数Xが取ることができる可能な値の数を見つける必要があります。

Aが26、Bが2であると仮定します。したがって、Xの推奨値は{3、4、6、8、12、24}になり、カウントは6になります。これが答えです。より良いアイデアを得るためのアルゴリズムを見てみましょう。

アルゴリズム

possibleWayCount(a、b)−

begin
   if a = b, then there are infinite solutions
   if a < b, then there are no solutions
   otherwise div_count := find_div(a, b)
   return div_count
end

find_div(a、b)−

begin
   n := a – b
   div_count := 0
   for i in range 1 to square root of n, do
      if n mode i is 0, then
         if i > b, then
            increase div_count by 1
         end if
         if n / i is not same as i and (n / i) > b, then
            increase div_count by 1
         end if
      end if
   done
end

#include <iostream>
#include <cmath>
using namespace std;
int findDivisors(int A, int B) {
   int N = (A - B);
   int div_count = 0;
   for (int i = 1; i <= sqrt(N); i++) {
      if ((N % i) == 0) {
         if (i > B)
            div_count++;
         if ((N / i) != i && (N / i) > B) //ignore if it is already counted
            div_count++;
      }
   }
   return div_count;
}
int possibleWayCount(int A, int B) {
   if (A == B) //if they are same, there are infinity solutions
      return -1;
   if (A < B) //if A < B, then there are two possible solutions
      return 0;
   int div_count = 0;
   div_count = findDivisors(A, B);
   return div_count;
}
void possibleWay(int A, int B) {
   int sol = possibleWayCount(A, B);
   if (sol == -1)
      cout << "For A: " << A << " and B: " << B << ", X can take infinite values greater than " << A;
   else
      cout << "For A: " << A << " and B: " << B << ", X can take " << sol << " values";
}
int main() {
   int A = 26, B = 2;
   possibleWay(A, B);
}

出力

For A: 26 and B: 2, X can take 6 values

  1. C++での10進数から16進数への変換プログラム

    10進数を入力として指定すると、タスクは指定された10進数を16進数に変換することです。 コンピューターの16進数は16を底とし、10進数は10を底とし、0〜9の値で表されますが、16進数は0〜15から始まる数字で、10はA、11はB、12はC、 Dとして13、Eとして14、Fとして15。 10進数を16進数に変換するには、指定された手順に従います- まず、指定された数値を変換数値の基本値で除算します。例: 6789を16を底とする16進数に変換し、商を取得して格納する必要があるため、6789を16で除算します。余りが0〜9の場合はそのまま保存し、余りが10〜15の場合は、文字形式でA-

  2. C++での10進数から2進数への変換プログラム

    10進数を入力として指定すると、タスクは指定された10進数を2進数に変換することです。 コンピューターの10進数は10進数で表され、2進数は2進数の0と1の2つしかないため、2進数で表されますが、10進数は0〜9から始まる任意の数値にすることができます。 10進数を2進数に変換するには、次の手順に従います- まず、指定された数値を変換数値の基本値で除算します。例: 42を2を底とする2進数に変換し、商を取得して格納する必要があるため、42を2で除算します。余りが0の場合、ビットを0として格納します。それ以外の場合は1です。 取得した商を2進数の基数である2で除算し、ビットを格納し続けます