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"); } }