Juzgar pares de números amistosos (tema de función)

Tema Descripción

Ingrese dos enteros positivos m y n, genere secuencialmente todos los pares de números amistosos entre m y n.

Se dice que un logaritmo es amigable si la suma de todos los factores positivos de dos números enteros (incluido 1, excluyéndose a sí mismo) es igual al otro. Por ejemplo: 1184 y 1210 son pares amistosos, porque la suma
de los factores de 1184 es 1+2+4+8+16+32+37+74+148+296+592=1210 La suma de los factores de 1210
es 1+2+ 5+10+11+22+55+110+121+242+605=1184
requiere que el programa defina una función facsum () y una función principal (), la función facsum () calcula y devuelve la suma de todos los factores positivos de n, y el resto La función se implementa en la función main().
int facsum (int n)
{
// calcular la suma de todos los factores positivos de n, esta función devuelve sum
}

ingresar

Ingrese dos enteros positivos m y n, 1<m<=n<=10000.

producción

Muestra todos los pares de números amistosos entre m y n.
Al generar cada par de números amistosos, se requiere que el número decimal esté delante del número grande y se eliminan los pares de números repetidos. Por ejemplo, 220 y 284 son un par de números amigables, y 284 y 220 también son un par de números amigables. En este momento, solo necesita generar el par de números amigables 220 y 284. Cada par de números amistosos ocupa una línea y los dos números están separados por espacios.

Si no hay un par amigo entre m y n, emite "Sin respuesta".

entrada de muestra

100 8000

salida de muestra

220 284 
1184 1210 
2620 2924 
5020 5564 
6232 6368

Consejo: no emita directamente, de lo contrario, la salida excederá el límite, guarde todos los pares de números reales amistosos

#include <stdio.h>
#include <stdlib.h>
int fac( int n)
  {
      int i,m,sum=1;
         for (i=2;i<n;i++)
         {
         if (n%i==0)
             {
              m=n/i;
             sum=sum+i;//找N的因数并加起来;
             }
         }
         return sum;
}
int main( )
  {
      int m,n,i,j,flag=0;
          scanf ( "%d%d" ,&m,&n);
           int s[n];
                for (i=0;i<=n-m;i++)
                     s[i]=fac(i+m);//将每个数的因数和都保存下来。
                for (i=m;i<n;i++)
                     {
                         j=s[i-m];
                if (j>i&&j<=n&&s[j-m]==i)
                     flag=1,//判断是否有值。
                     printf ( "%d %d\n" ,i,j);
                }
                if (!flag)
                 printf ( "No answer\n" );
  
return 0;

Supongo que te gusta

Origin blog.csdn.net/zs520ct/article/details/42871603
Recomendado
Clasificación