Heim > Backend-Entwicklung > C++ > Hauptteil

Ein Programm zum Lösen modularer Gleichungen in C/C++ schreiben?

WBOY
Freigeben: 2023-09-12 14:21:03
nach vorne
1224 Leute haben es durchsucht

Ein Programm zum Lösen modularer Gleichungen in C/C++ schreiben?

Hier sehen wir ein interessantes Problem im Zusammenhang mit modularen Gleichungen. Nehmen wir an, wir haben zwei Werte A und B. Wir müssen die Anzahl möglicher Werte ermitteln, die die Variable X annehmen kann, sodass (A mod X) = B gilt.

Angenommen, A ist 26 und B ist 2. Der bevorzugte Wert von X ist also {3, 4, 6, 8, 12, 24}, daher beträgt die Anzahl 6. Das ist die Antwort. Werfen wir einen Blick auf den Algorithmus, um ihn besser zu verstehen.

Algorithm

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
Nach dem Login kopieren

find_div(a, b) – Die chinesische Übersetzung von

begin
   n := a &ndash; 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
Nach dem Login kopieren

Example

lautet:

Example

#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);
}
Nach dem Login kopieren

Output

For A: 26 and B: 2, X can take 6 values
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEin Programm zum Lösen modularer Gleichungen in C/C++ schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage