1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | //http://bhsmath.tistory.com/52 //https://kldp.org/node/36453 /* 입력받은 숫자를 소인수 분해 한다. -> 분해된 소인수들의 각 합을 구해 서로 곱한다. {ex: 2^2, 3^2의 소인수들을 얻었다면, (1 + 2^1 + 2^2) x ( 1 + 3^1 + 3^2 )} */ int SumOfDivisors(int n) { if (n == 0) return 0; vector<int> factorSums; int max = (int)sqrt(n); for (int factor = 2; factor <= max; factor++) { int pow = 1, factorSum = 1; while (n % factor == 0) { n /= factor; factorSum += CustomPow(factor, pow); pow++; } if (factorSum > 1) { factorSums.push_back(factorSum); } } if (n > 1) { factorSums.push_back(n+1); } int sumDivisors = 1; for (auto s : factorSums) { sumDivisors *= s; } return sumDivisors; } int CustomPow(int num, int pow) { int sum = 1; while (pow > 0) { sum *= num; pow--; } return sum; } |
2019년 4월 13일 토요일
# 약수의 합 구하기
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기