1-goldbach/{v4.1 → v4.2}/GoldbachWorker.h RENAMED
@@ -1,69 +1,71 @@
1
  #ifndef GOLDBACHWORKER_H
2
  #define GOLDBACHWORKER_H
3
 
4
  #include <QThread>
5
 
6
  class GoldbachWorker : public QThread
7
  {
8
  Q_OBJECT
9
  Q_DISABLE_COPY(GoldbachWorker)
10
 
11
  private:
12
  long long number = 0;
13
  int workerId = -1;
14
  int workerCount = 0;
15
  QVector<QString>& results;
16
  int progressPercent = 0;
17
 
18
  public:
19
  explicit GoldbachWorker(long long number, int workerId, int workerCount, QVector<QString>& results, QObject* parent = nullptr);
20
  void run() override;
 
 
21
 
22
  signals:
23
  void sumFound(const QString& sum) const;
24
  void calculationDone(long long sumCount) const;
25
  void progressUpdated(int workerId, int percent) const;
26
 
27
  private:
28
  void updateProgress(int newPercent);
29
 
30
  private:
31
  /**
32
  * @brief Calcula las sumas de Goldbach para el numero dado y las agrega a una pizarra
33
  * @param number El numero dado por el usuario
34
  * @return La cantidad de sumas encontradas
35
  */
36
  long long calculate(long long number);
37
  /**
38
  * Calcula todas las sumas de dos primos que equivalen al numero dado, y las presenta
39
  * en el area resultado. Incrementa la barra de progreso mientras realiza el calculo
40
  * de la conjetura fuerte de Goldbach, por ejemplo:
41
  *
42
  * 4 == 2 + 2
43
  * 6 == 3 + 3
44
  * 10 == 3 + 7 == 5 + 5
45
  *
46
  * @param numero Un numero entero par mayor o igual a 4
47
  * @return la cantidad de sumas de dos primos encontradas
48
  */
49
  long long calculateEvenGoldbach(long long number);
50
  /**
51
  * Calcula todas las sumas de tres primos que equivalen al numero dado, y las presenta
52
  * en el area resultado. Incrementa la barra de progreso mientras realiza el calculo
53
  * de la conjetura debil de Goldbach, por ejemplo:
54
  *
55
  * 7 == 2 + 2 + 3
56
  * 9 == 2 + 2 + 5 == 3 + 3 + 3
57
  *
58
  * @param numero Un numero entero impar mayor o igual a 7
59
  * @return la cantidad de sumas de tres primos encontradas
60
  */
61
  long long calculateOddGoldbach(long long number);
62
  /**
63
  * Retorna true si numero es primo, false si numero no es primo o menor que 2
64
  * Por definicion 1 no es primo ni compuesto, este metodo retorna false
65
  */
66
  static bool isPrime(long long numero);
67
  };
68
 
69
  #endif // GOLDBACHWORKER_H
1
  #ifndef GOLDBACHWORKER_H
2
  #define GOLDBACHWORKER_H
3
 
4
  #include <QThread>
5
 
6
  class GoldbachWorker : public QThread
7
  {
8
  Q_OBJECT
9
  Q_DISABLE_COPY(GoldbachWorker)
10
 
11
  private:
12
  long long number = 0;
13
  int workerId = -1;
14
  int workerCount = 0;
15
  QVector<QString>& results;
16
  int progressPercent = 0;
17
 
18
  public:
19
  explicit GoldbachWorker(long long number, int workerId, int workerCount, QVector<QString>& results, QObject* parent = nullptr);
20
  void run() override;
21
+ static long long calculateStart(long long dataCount, int workerCount, int workerId, long long dataStart = 0);
22
+ static long long calculateFinish(long long dataCount, int workerCount, int workerId, long long dataStart = 0);
23
 
24
  signals:
25
  void sumFound(const QString& sum) const;
26
  void calculationDone(long long sumCount) const;
27
  void progressUpdated(int workerId, int percent) const;
28
 
29
  private:
30
  void updateProgress(int newPercent);
31
 
32
  private:
33
  /**
34
  * @brief Calcula las sumas de Goldbach para el numero dado y las agrega a una pizarra
35
  * @param number El numero dado por el usuario
36
  * @return La cantidad de sumas encontradas
37
  */
38
  long long calculate(long long number);
39
  /**
40
  * Calcula todas las sumas de dos primos que equivalen al numero dado, y las presenta
41
  * en el area resultado. Incrementa la barra de progreso mientras realiza el calculo
42
  * de la conjetura fuerte de Goldbach, por ejemplo:
43
  *
44
  * 4 == 2 + 2
45
  * 6 == 3 + 3
46
  * 10 == 3 + 7 == 5 + 5
47
  *
48
  * @param numero Un numero entero par mayor o igual a 4
49
  * @return la cantidad de sumas de dos primos encontradas
50
  */
51
  long long calculateEvenGoldbach(long long number);
52
  /**
53
  * Calcula todas las sumas de tres primos que equivalen al numero dado, y las presenta
54
  * en el area resultado. Incrementa la barra de progreso mientras realiza el calculo
55
  * de la conjetura debil de Goldbach, por ejemplo:
56
  *
57
  * 7 == 2 + 2 + 3
58
  * 9 == 2 + 2 + 5 == 3 + 3 + 3
59
  *
60
  * @param numero Un numero entero impar mayor o igual a 7
61
  * @return la cantidad de sumas de tres primos encontradas
62
  */
63
  long long calculateOddGoldbach(long long number);
64
  /**
65
  * Retorna true si numero es primo, false si numero no es primo o menor que 2
66
  * Por definicion 1 no es primo ni compuesto, este metodo retorna false
67
  */
68
  static bool isPrime(long long numero);
69
  };
70
 
71
  #endif // GOLDBACHWORKER_H