int rotaciona(int n, int cont){ //pega o 1° digito do número e vai rotacionando ele para a esquerda int j,primo=0,dig,dig2,rotacionado=0; for(j=0;j<cont;j++){ switch(cont){ case 4: //para um número com 4 algarismos dig = n/1000; dig2 = n%1000; rotacionado = (dig2*10) + dig; n = rotacionado; if(primos_circ(n) == 1 && qtdDigitos(n) == 4){ //se o rotacionado for primo e tiver 4 digitos primo++; //contador deverá possuir 4 se o número for primo circular } break; case 5: //para um número com 4 algarismos dig = n/10000; dig2 = n%10000; rotacionado = (dig2*10) + dig; n = rotacionado; if(primos_circ(n) == 1 && qtdDigitos(n) == 5){ //se o rotacionado for primo e tiver 5 digitos primo++; //contador deverá possuir 5 se o número for primo circular } break; } if(primo == 4 && cont == 4)// retorna 1 se for primo circular return 1; if(primo == 5 && cont == 5) return 1; } }
int qtdDigitos(int N) { if(N < 10) return 1; else return 1 + qtdDigitos(N / 10); }
int main() { int N, T, matriz[MAX][MAX], i, j; #ifdef DEBUG double tI_ = clock(); #endif while(scanf("%d", &N) && N != 0) { for(i = 0; i < N; i++) for(j = 0; j < N; j++) matriz[i][j] = (int) pow(2, i + j); T = qtdDigitos((int) pow(2, i + j - 2)); for(i = 0; i < N; i++) { printf("%*d", T, matriz[i][0]); for(j = 1; j < N; j++) printf(" %*d", T, matriz[i][j]); printf("\n"); } printf("\n"); } #ifdef DEBUG printf("Tempo: %.1lf %.1lf\n", clock() - tI_, (clock() - tI_) / CLK_TCK); #endif return 0; }
main(){ int n,cont=0,i=1; printf("\t VERIFICA QUANTOS NÚMEROS SãO PRIMOS CIRCULARES ENTRE 1000 E 20000\n\n"); for(n=1000; n <= 20000;n++){ if(primos_circ(n) == 1){ // avalia se o número é primo cont = qtdDigitos(n); if(rotaciona(n,cont) == 1 )//avalia se é primo circular printf("\nO %d° número primo circular é %d",i++,n); } } }