-
Notifications
You must be signed in to change notification settings - Fork 0
/
algebra.c
110 lines (104 loc) · 2.89 KB
/
algebra.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "algebra.h"
/**
* [EN] This method check if an long long integer number is odd
* [PT] Esse metodo verifica se um numero long long inteiro e par
* @param input_number an long long integer number
* @return TRUE if is Odd or FALSE if is Even
*/
Boolean is_odd(long long int input_number)
{
Boolean is_odd = FALSE;
if(input_number % 2 == 1)
{
is_odd = TRUE;
}
return is_odd;
}
/**
* [EN] This method check if an long long integer number is negativo
* [PT] Esse metodo verifica se um numero long long inteiro e negativo
* @param input_number an long long integer number
* @return TRUE if is negative or FALSE if is natural
*/
Boolean is_negative(long long int input_number)
{
Boolean is_negative = FALSE;
if(input_number < 0)
{
is_negative = TRUE;
}
return is_negative;
}
/**
* [EN] This method check if the two numbers is not coprime
* [PT] Esse metodo verifica se os dois numeros nao sao coprimos
* @param
* @return TRUE if is not coprime or FALSE if is coprime
*/
Boolean is_divisible(long long int numerator_number, long long int denominator_number)
{
Boolean is_divisible = FALSE;
if( (numerator_number % denominator_number) == 0)
{
is_divisible = TRUE;
}
return is_divisible;
}
/**
* [EN] This method return a random natural number from the range:
* [PT] Esse metodo retorna um numero natural aleatorio do alcance:
* a < or = x < or = b
* @param minimum_number (a)
* @param maximum_number (b)
* @return random_number (x)
*/
unsigned long long int random_natural_number(unsigned long long int minimum_number, unsigned long long int maximum_number)
{
srand(time(NULL));
unsigned long long int random_number = (rand() % (maximum_number - minimum_number + 1)) + minimum_number;
return random_number;
}
/**
* [EN] This method return two numbers (d and s), from the equation:
* [PT] Esse método retorna dois dois numeros (d e s), de acordo com a equacao:
* n = 2^(s) * d
* @param input_number (n) must be (p-1), p = prime number
* @return Two_Natural_Numbers
* first_number (s)
* second_number (d) an odd value
*/
Two_Natural_Numbers decompose_as_power_of_two(unsigned long long int input_number)
{
unsigned long long int s = 1;
unsigned long long int d = 1;
Two_Natural_Numbers factors;
for(s = 1; s < input_number; s++)
{
for(d = 1; d < (input_number/s); d++)
{
long long int result = (long long int) pow(2, s)*d;
if(result == input_number && is_odd(d) == TRUE)
{
factors.first_number = s;
factors.second_number = d;
return factors;
}
}
}
}
/**
* [EN] This method return magnitude's number
* [PT] Esse método retorna a magnitude do número
* @param input_number number to be calculated magnitude
* @return magnitude
*/
long long int get_magnitude(long long int input_number)
{
long long int number = input_number;
long long int magnitude = 0;
while(number > 0){
magnitude++;
number = number / 10;
};
return magnitude;
}