mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
Implementation of Hardy Ramanujan Algorithm in /maths (#1355)
* Implementation of Hardy Ramanujan Algorithm * added docstrings * added doctests * Run Python black on the code * Travis CI: Upgrade to Python 3.8 * Revert to Python 3.7
This commit is contained in:
parent
acd962b2b6
commit
5c351d81bf
@ -1,5 +1,4 @@
|
||||
language: python
|
||||
dist: xenial # required for Python >= 3.7
|
||||
python: 3.7
|
||||
cache: pip
|
||||
before_install: pip install --upgrade pip setuptools
|
||||
|
45
maths/hardy_ramanujanalgo.py
Normal file
45
maths/hardy_ramanujanalgo.py
Normal file
@ -0,0 +1,45 @@
|
||||
# This theorem states that the number of prime factors of n
|
||||
# will be approximately log(log(n)) for most natural numbers n
|
||||
|
||||
import math
|
||||
|
||||
|
||||
def exactPrimeFactorCount(n):
|
||||
"""
|
||||
>>> exactPrimeFactorCount(51242183)
|
||||
3
|
||||
"""
|
||||
count = 0
|
||||
if n % 2 == 0:
|
||||
count += 1
|
||||
while n % 2 == 0:
|
||||
n = int(n / 2)
|
||||
# the n input value must be odd so that
|
||||
# we can skip one element (ie i += 2)
|
||||
|
||||
i = 3
|
||||
|
||||
while i <= int(math.sqrt(n)):
|
||||
if n % i == 0:
|
||||
count += 1
|
||||
while n % i == 0:
|
||||
n = int(n / i)
|
||||
i = i + 2
|
||||
|
||||
# this condition checks the prime
|
||||
# number n is greater than 2
|
||||
|
||||
if n > 2:
|
||||
count += 1
|
||||
return count
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
n = 51242183
|
||||
print(f"The number of distinct prime factors is/are {exactPrimeFactorCount(n)}")
|
||||
print("The value of log(log(n)) is {0:.4f}".format(math.log(math.log(n))))
|
||||
|
||||
"""
|
||||
The number of distinct prime factors is/are 3
|
||||
The value of log(log(n)) is 2.8765
|
||||
"""
|
Loading…
Reference in New Issue
Block a user