Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Números primos até um limite dado.

$
0
0
boas de novo. Agora estou mais a tentar blindar o programa de maneiras a que se o utilizador inserir um carácter nao-numérico, o programa continue a pedir um input, e so corre quando o caracter for numerico. De certeza que tenho um erro de sintaxe, pois o programa esta a entrar em loop infinito. Eis o codigo neste momento: 1 /* primeFind.c -- acha primos ate um limite pedido */ 2 #include <stdio.h> 3 4 int main(void) 5 { 6 int lim,i,j; 7 lim=i=j=0; // inicializar as variaveis a zero para nao ficarem com "lixo" 8 printf("Vamos encontrar numeros primos ate um limite dado.\n"); 9 do 10 { 11 printf("Insira um limite:\n"); 12 scanf("%d",&lim); 13 } while ((scanf("%d",&lim)) == 0 ); 14 printf("Numeros primos entre %d e %d:\n%d\n",0,lim,2); 15 for(i=3;i<=lim;i+=2)//o dois e o unico primo par, por isso so percorre os numeros impares 16 { 17 for(j=i-2;j>=3;j-=2)//se nao for primo sera divisivel por um dos impares ate 3 18 { 19 if(i%j==0) 20 break; 21 if(j==3) // se o valor de j chegar ate ao 3 significa que i e primo 22 printf("%d\n",i); 23 } 24 } 25 return 0; 26 } Agradecia uma ajuda por favor. Quanto a questão dos números compostos vou-me a ela logo que resolva este imbróglio. Pelo que entendi um numero composto pode ser expresso na forma n= m * m, em que pelo menos um dos factores e menor ou igual a sqr(n). Pois se ambos fossem maiores que a sqr(n) o numero seria maior que n. exemplo: 16 = 4 * 4 Pela lei que o Warrior me deu eu só tenho que averiguar se sqr(m) tem factores primos alem de 1 e m -o que indicaria que nao era primo! - ou caso contrario seria primo. Agora surge um problema, suponhamos o numero 30. vamos achar a sqr(30) e obtemos 5.48 arredondado a 2 c.d. Ora como e que eu vou fazer a verificacao em numeros reais como este? A trabalhar com inteiros a variável int vai arredondar a sqr(30) → 5 que e primo, mas 30 nao e primo! Quanto muito teria de arredondar para o inteiro mais próximo no sentido positivo →6 que nao e primo, o que condiz com 30. Acredito que tenho aqui umas voltinhas para dar, mas e sempre interessante... Mas agora agora tenho este problema com o do while (). Muito obrigado pela paciência.

Viewing all articles
Browse latest Browse all 11336

Trending Articles