Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- VPL - Ejercicio 2
- Escriba una función en C++ que reciba dos enteros positivos N y C.
- Esta función debe retornar la cantidad de números primos de C dígitos que pueden formarse con los dígitos de N. Para formar los números a comprobarse,
- deben tomarse los dígitos contiguos de N en forma ordenada (de izquierda a derecha), así como se muestra en los ejemplos.
- Si en el proceso se generan números “repetidos”, se cuenta por cada uno de ellos (se muestra un ejemplo).
- Entrada N / C Salida
- 13787 1 1, 3, 7, 8, 7 2
- 144 1 1, 1, 4 3
- 13787 2 13, 37, 78, 87 2
- 13787 >=6 Ninguno -1
- */
- #include<iostream>
- using namespace std;
- int cantDigitos(int);
- bool esPrimo(int);
- int potencia(int, int);
- int cantNoPrimos_C_Digitos(int a, int b);
- int main()
- {
- int N,C;
- cin>>N>>C;
- cout<<"Cantidad de no-primos de "<<C<<" digitos: "<<cantNoPrimos_C_Digitos(N,C)<<endl;
- return 0;
- }
- int cantDigitos(int n)
- {
- int cont=0;
- while(n>0){
- cont++;
- n/=10;
- }
- return cont;
- }
- bool esPrimo(int n)
- {
- int cont=0;
- for(int i=2 ; i<=n ; i++){
- if(n%i==0)
- cont++;
- }
- if(cont==1)
- return true;
- return false;
- }
- int potencia(int a, int b)
- {
- int acumulador=1;
- for(int i=0 ; i<b ; i++){
- acumulador *= a;
- }
- return acumulador;
- }
- /*
- Este codigo separa linea por linea los numeros deseados(en este caso en pares de 2)
- int n=354281;
- cout<<"-->"<<n<<endl;
- cout<<"35 -->"<<(n/10000)%100<<endl;
- cout<<"54 -->"<<(n/1000)%100<<endl;
- cout<<"42 -->"<<(n/100)%100<<endl;
- cout<<"28 -->"<<(n/10)%100<<endl;
- cout<<"81 -->"<<(n)%100<<endl;
- Si nos fijamos, el divisor de 'N' va decrementando de forma exponencial (10^i) donde i decrementa hasta llegar a i=0 y empieza en i = cantDigitos de 'N' - cantNumTomados(C, segun el enunciado)
- Ademas, el valor por el cual de hace la operacion '%', tambien esta representado exponencialmente como 10^cantNumTomados(C, segun el enunciado)
- Asi de forma general tenemos --> num = (n/(10^i))%(10^C)
- */
- int cantNoPrimos_C_Digitos(int a, int b)
- {
- int cont=0;
- int num;
- if(b>cantDigitos(a))
- return -1;
- for(int i=cantDigitos(a)-b ; i>=0 ; i--){
- num = (a/potencia(10,i))%potencia(10,b);
- if(!esPrimo(num))
- cont++;
- }
- return cont;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement