寻找完全数.c 696 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include <stdio.h>
  2. int isPerfectNumber(int num) {
  3. int sum = 1;
  4. int i;
  5. for (i = 2; i * i <= num; i++) {
  6. if (num % i == 0) {
  7. if (i * i == num) {
  8. sum += i;
  9. } else {
  10. sum += i + num / i;
  11. }
  12. }
  13. }
  14. return sum == num;
  15. }
  16. int findLargestPerfectNumber(int m) {
  17. int i;
  18. for (i = m; i >= 1; i--) {
  19. if (isPerfectNumber(i)) {
  20. return i;
  21. }
  22. }
  23. return -1;
  24. }
  25. int main() {
  26. int m;
  27. scanf("%d", &m);
  28. int largestPerfectNumber = findLargestPerfectNumber(m);
  29. if (largestPerfectNumber != -1) {
  30. printf("%d\n",largestPerfectNumber);
  31. }
  32. return 0;
  33. }