Un número es Smith si la suma de sus dígitos es igual a la suma de los dígitos de cada número de la descomposición canónica.
Ejem:
* 22 D.C.: 2 x 11
2 + 2 = 2 + 1 + 1=4
* 378 D.C. : 2 × 3 × 3 × 3 × 7
3 + 7 + 8 = 2 + 3 + 3 + 3 + 7=18
SOLUCIÓN:
#include<iostream> #include<cmath> using namespace std; bool primo(int x){ int divisor=2; int raiz=sqrt(x); if(x>=2){ while(divisor<=raiz){ if(x%divisor==0){ return false; } divisor++; } return true; } else return false; } //devuelve true si y es un factor primo de x en caso contrario devuelve false int factorPrimo(int x,int y){ if(primo(y)==true && x%y==0) return true; else return false; } int sumaDigitos(int x){ int acum=0; while(x>0){// x/10 es cero cuando x es menor de 10 acum+=x%10; x/=10; } return acum; } int sumaDigitosFactoresPrimos(int x){ int cont =2; int acum=0; while(x>1){ if(factorPrimo(x,cont)){ acum+=sumaDigitos(cont); x/=cont; cont=2; } else cont++; } return acum; } int main (int argc, char *argv[]) { int numero; int sd;//suma de digitos del numero int sumDigitosFP;//suma de digitos de los facores primos cout<<"ingrese un numero:"; cin>>numero; sd=sumaDigitos(numero); sumDigitosFP=sumaDigitosFactoresPrimos(numero); if(sd==sumDigitosFP) if(sd!=0) cout<<"el numero ingresado es Smith "<<endl; else cout<<"el numero ingresado no es Smith"<<endl; else cout<<"el numero ingresado no es Smith"<<endl; return 0; }
0 Comment to "Numero Smith"
Publicar un comentario