所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(0<m<=n<=10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。
输入样例:
1 30
输出样例:
1 = 1 6 = 1 + 2 + 328 = 1 + 2 + 4 + 7 + 14
import java.util.Scanner; public class Main { public static void main(String[] args) { int m, n, i, j, k, sum, temp; int[] a = new int[10]; Scanner cin = new Scanner(System.in); m = cin.nextInt(); n = cin.nextInt(); for (i = m; i <= n; ++i) { sum = 1; for (j = 2; j <= Math.sqrt(i); ++j) { /* 求因子和 */ if (i % j == 0) { sum += j; temp = i / j; if (temp > j && temp < i) sum += temp; } } if (sum == i) { /* 完数 */ k = 0; a[k++] = 1; for (j = 2; j <= i / 2; ++j) { /* 求完数因子并保存在数组中 */ if (i % j == 0) a[k++] = j; } System.out.print(i + " = "); for (j = 0; j < k - 1; ++j) System.out.print(a[j] + " + "); System.out.println(a[k - 1]); } } } }#include <stdio.h> #include <math.h> int main(void) { int m, n, i, j, k, sum, temp; int a[10]; scanf("%d%d", &m, &n); for(i = m; i <= n; ++i) { sum = 1; for(j = 2; j <= sqrt(i); ++j) { /* 求因子和 */ if(i % j == 0) { sum += j; temp = i / j; if(temp > j && temp < i) sum += temp; } } if(sum == i) { /* 完数 */ k = 0; a[k++] = 1; for(j = 2; j <= i / 2; ++j) { /* 求完数因子并保存在数组中 */ f(i % j == 0) a[k++] = j; } printf("%d = ", i); /* 输出 */ for(j = 0; j < k - 1; ++j) printf("%d + ", a[j]); printf("%d\n", a[k - 1]); } } return 0; }