To check for prime numbers:

def prime(x): return not any ( ( x % (np.array(range( int (np.sqrt(x)) ) ) + 2) == 0 ).tolist() )Remember that the fundamental theorem of arithmetics guarantees that every integer can be decomposed in prime numbers, and that

**it is necessary to divide up only to a number's square root to know whether it is prime**, a fact known in ancient Greece among many facts about integer arithmetic (for instance, Euclid proved that there are infinite prime numbers in Proposition 20 of his Elements)

def divisors(x):In this case we need to check whether primes from 2 to half of it (we could optimize this by finding the minimum factor, and the range of checks we really need to do is (min_factor(x) , x/min_factor(x) ) ), since having a factor larger than its half would imply it is prime by the previous principle.

return np.array( [k for k in range( 2, int(np.sqrt(x) ) ) if prime(k) and not x % k] )

## No comments:

## Post a Comment