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.
↧