Big Integer
Introdução
Por que usar?
Computar o valor de 25!
28! é divisível por 8736?
Trabalhar com string.
Não tem limite.
Introdução
Classe do Java.
A classe suporta as seguintes operações:
Adição (add);
Subtração (subtract);
su = s.subtract(b);
Multiplicação (multiply);
s = s.add(b); // b também é um BigInteger
su = s.multiply(b);
Divisão (divide);
s = s.divide(b);
Introdução
Mais operações
Resto (remainder);
Modulo (mod);
s= s.mod(b);
Divisão e resto (divideAndRemainder);
s = s.remainder(b);
s = s.divideAndRemainder(b); // retorna uma array, o primeiro contém s / b e
o outro s % b
Potência (power).
s = s.pow(b); // b aqui tem que ser inteiro
Como usar
UVA 424 - Integer Inquiry
import java.math.BigInteger;
import java.util.Scanner;
class Main {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
BigInteger zero = BigInteger.ZERO;
BigInteger sum = BigInteger.ZERO;
for(;;) {
BigInteger b = s.nextBigInteger();
if(b.equals(zero)) break;
sum = sum.add(b);
}
System.out.println(sum.toString());
}
}
Como usar
UVA 1226 - Numerical surprises
import java.util.Scanner;
import java.math.BigInteger;
class Main {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
int t = s.nextInt();
BigInteger r = BigInteger.ZERO;
BigInteger p = BigInteger.ZERO;
BigInteger n = BigInteger.ZERO;
for(int i = 0; i < t; ++i){
n = s.nextBigInteger();
p = s.nextBigInteger();
r = p.remainder(n);
System.out.println(r.toString());
}
}
}
Fatoração
Introdução
Um número – não primo – pode ser escrito como uma multiplicação
dos seus fatores primos.
Algoritmo usando DP;
O( √ N /ln√ N)
Como usar
UVA 583 - Prime Factors
vector<int> primeFactors(long long int N) {
vector<int> factors;
long long PF_idx = 0, PF = primes[PF_idx];
while (N != 1 && (PF * PF <= N)) {
while (N % PF == 0) {
N /= PF; factors.push_back(PF);
}
PF = primes[++PF_idx];
}
if (N != 1) factors.push_back(N);
return factors;
}
int main() {
int n;
sieve(50000);
while(scanf("%d", &n) && n){
vector<int> factors = primeFactors(fabs(n));
printf(n < 0? "%d = -1 x %d" : "%d = %d", n, factors[0]);
for(int i = 1; i < factors.size(); i++)
printf(" x %d", factors[i]);
printf("\n");
}
}