Sei sulla pagina 1di 4

 

 
 
 
 
 
 
 
SMDR  
“Simple manual de referencia”  
 
 
 
 
 
 
 
 
 
 
 
 
Version 0.1.0 
 
Template de C++ para competencias  
#include <bits/stdc++.h>
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define debug(x) cerr << #x << " = " << x << endl;
#define rep(i,x,y) for(int i = x; i <= y; i++)
#define set(x, y) (x |= (1 << y))
#define clear(x, y) (x &=~(1 << y))
using​ ​namespace std;
typedef​ ​long​ ​long ll;
typedef​ vector<​int​> vi;
typedef​ pair<​int​,​int​> pi;
int​ main() {
// Código aquí...
return​ ​0​;
}

 
Ejemplo 
#include <bits/stdc++.h>
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define debug(x) cerr << #x << " = " << x << endl;
#define rep(i,x,y) for(int i = x; i <= y; i++)
#define set(x, y) (x |= (1 << y))
#define clear(x, y) (x &=~(1 << y))
using​ ​namespace std;
typedef​ ​long​ ​long ll;
typedef​ vector<​int​> vi;
typedef​ pair<​int​,​int​> pi;
int​ main() {
int​ n; cin >> n;
vi a(n); ​// vector int con n elementos
rep(i, ​0​, n​-1​) { ​// Ciclo for de 0 a n-1
cin >> a[i];
}
// Imprimir la lista de números leídos
rep(i, ​0​, n​-1​) cout << a[i] << ​" "​;
return​ ​0​;

 
Teoría de números 
 
1. Criba de eratóstenes  
 
Descripción:  ​Permite  generar  los  números  primos  como  los  números  compuestos. 
Solo  se  necesita  generar  primos  hasta  raíz  de  n  elementos.  10^7  es  el  limite  para 
generar primos. 
Complejidad: ​NLog(N). 
 

const​ ​int​ LIM = ​10​^​7​+​5​;


bitset<LIM> bs;
vector<​int​> primos;
void​ criba() {
bs.set();
bs[​0​] = bs[​1​] = ​0​;
​for​(ll i = ​2​; i <= LIM; i++) {
​if​(bs[i]) {
​for​(​int​ j = i*i; j <= LIM; j += i) {
bs[j] = ​false​;
}
primos.eb((​int​)i);
}
}
}

bool​ es_primo(ll n) {
​return​ bs[n];

 

2. Factorizacion prima 

Descripción:​ Encuentra los factores primos de un número N.


Complejidad: ​O(sqrt(N))
vector<​int​> fac;
void​ factorizar(​int​ n) {
while​(n % ​2​ == ​0​) fac.push_back(​2​), n /= ​2​;
for​(​int​ i = ​3​; i*i <= n && n > ​1​; i += ​2​) {
​while​(n % i == ​0​) fac.push_back(i), n /= i;
}
if​(n > ​1​) ans.push_back(n);
}
 
3. Divisores de un número. 
 
Descripción: ​Devuelve todos los divisores de un número. 
Complejidad: ​O(sqrt(N)) 
 
set<​int​> o;
void​ find_div(​int​ m) {
​int​ s = sqrt(m);
​for​(​int​ i = ​1​; i <= s; i++) {
​if​(m%i == ​0​) {
​if​(m/i == i) o.insert(i);
​else​ {
o.insert(i);
o.insert(m/i);
}
}
}
o.insert(m);

 

Potrebbero piacerti anche