Bom Dia..
estou tentando geral um codigo para receber um internvalo informado pelo usuario por exemplo
intervalo=1 ate 9999,
os numeros ferfeitos nesse intervalo são 6,28,496,8128
quantidade = 4
um numero perfeitos e aquele que é igual a soma de seus divisores
ex 28=1+2+4+7+14
preciso imprimir somente a quantidade de numeros não é necessario so numeros
obs.
usando somente for e if/else
tipow jah fiz isso masi nun sei + o q faser...
#include
#include
int main()
{
int i, j, ini, fim, qtd;
printf("digite o intervalo inicial: ");
scanf("%d", &ini);
printf("digite o intervalo final: ");
scanf("%d", &fim);
for(i=ini; i<=fim; i++)
{
for(j=1; j<=(i/2); j++)
{
if((i%2)==0)
qtd++;
}
}
printf("%d\n\n", qtd);
system("pause");
}
alguem pode me ajudar??
obrigado
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- Numero perfeito no C
Primeiramente, acostume-se a utilizar as tags de código () para postar seus códigos .
Segundo, a lógica utilizada para checar se um número é perfeito ou não é razoávelmente simples. Na verdade, você vai precisar de uma estrutura de repetição (o for() por exemplo) que vai de 1 até o número em questão checando se esse número é divisível por cada número da iteração.
Você pode por exemplo fazer uma função "checaPerfeito(int num)" que tenha mais ou menos o esquema a seguir:
[code]
{
int sum,i;
sum = 0;
for (i=1; i < num;i++)
{
if((num%i) == 0)
sum = sum+i;
}
if (sum == num){
return 1;
}
else
return 0;
}
Aí ficou muito fácil hein?
Abs.
Linux User #394367
Asking Smart Questions
"Always remember that you are unique. Just like everyone else"
CaSt disse: Primeiramente, acostume-se a utilizar as tags de código () para postar seus códigos .
Segundo, a lógica utilizada para checar se um número é perfeito ou não é razoávelmente simples. Na verdade, você vai precisar de uma estrutura de repetição (o for() por exemplo) que vai de 1 até o número em questão checando se esse número é divisível por cada número da iteração.
Você pode por exemplo fazer uma função "checaPerfeito(int num)" que tenha mais ou menos o esquema a seguir:
[code]
{
int sum,i;
sum = 0;
for (i=1; i < num;i++)
{
if((num%i) == 0)
sum = sum+i;
}
if (sum == num){
return 1;
}
else
return 0;
}
Aí ficou muito fácil hein?
Abs.
na verdade para otimizar o código, ele pode testar somente até a metad do numero escolhido, já que acima da metade de um numero não existem divisores para ele. p.ex. 30 é divisivel até 15 (MDC) e acima de 15 não existem divisores para 30.
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)
Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
jcferranti disse: na verdade para otimizar o código, ele pode testar somente até a metad do numero escolhido, já que acima da metade de um numero não existem divisores para ele. p.ex. 30 é divisivel até 15 (MDC) e acima de 15 não existem divisores para 30.
Sim, sim, sim, sem dúvidas. As otimizações deixei por conta dele.
Linux User #394367
Asking Smart Questions
"Always remember that you are unique. Just like everyone else"
aew deu certo....
vlw..
obrigado..
eu usei a dika de jah dividir pela metade fiko show..
eu usei a dika de jah dividir pela metade fiko show..
Então melhore mais ainda... não é preciso ir até a metade, e sim até a raiz quadrada do número.
Tome como exemplo o número 400. Os divisores dele são: 1, 2, 4, 5, 8, 10, 16, 20, 25, 40, 50, 80, 100, 200 e 400.
Agora veja só:
1 x 400 = 400
2 x 200 = 400
4 x 100 = 400
5 x 80 = 400
8 x 50 = 400
10 x 40 = 400
16 x 25 = 400
20 x 20 = 400
Ou seja, pra cada divisor antes da raiz quadrada, há outro depois. Então você não precisa pesquisar divisores após a raiz quadrada do número. Pra números pequenos pode não fazer diferença, mas pra números grandes, faz uma diferença fantástica.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
aew Galera..
|Tudo Sussa|??
Aew dePois de FuncIOnar MudeI uns Bagumelos aki e Fiko AssIM...
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i, j, ini, fim, somadiv=0, qtd=0;
printf ("DIGITE UM NUMERO INICIAL: "
scanf ("%d", &ini);
printf ("DIGITE UM NUMERO FINAL: "
scanf ("%d", &fim);
for ( i=ini; i<= fim; i++)
{
somadiv = 0;
for (j=1; j < i; j++)
{
if ((i%j)==0)
somadiv = somadiv + j;
}
if (i == somadiv)
qtd++;
}
printf ("\n\nNESTE INTERVALO EXISTEM %d NUMEROS PERFEITOS!!!\n\n\n", qtd);
system ("pause"
}
e aew o que vc´s acharam?
fiko bom nos finar??
abraçss e obrigado pela ajuda galera..[
t+