Install
openclaw skills install mathsMathematical utility functions for factorization, digit counting, and large integer multiplication using Karatsuba algorithm. Use when solving number theory problems, computing factors, counting digit occurrences, or performing optimized large integer multiplication.
openclaw skills install mathsMathematical utility functions for number theory, digit analysis, and optimized integer operations.
from pywayne.maths import get_all_factors, digitCount, karatsuba_multiplication
# Get all factors of a number
factors = get_all_factors(28)
print(factors) # [1, 2, 4, 7, 14, 28]
# Count digit occurrences
count = digitCount(100, 1)
print(count) # 21 (digit 1 appears 21 times in 1-100)
# Large integer multiplication
product = karatsuba_multiplication(1234, 5678)
print(product) # 7006652
Return all factors of a positive integer.
get_all_factors(n: int) -> list
Parameters:
n - Positive integer to factorizeReturns:
nUse Cases:
Example:
from pywayne.maths import get_all_factors
factors = get_all_factors(36)
print(factors) # [1, 2, 3, 4, 6, 9, 12, 18, 36]
# Check if number is prime
n = 17
factors = get_all_factors(n)
if len(factors) == 2: # Only 1 and itself
print(f"{n} is prime")
else:
print(f"{n} is not prime")
Count occurrences of digit k from 1 to n.
digitCount(n, k) -> int
Parameters:
n - Positive integer, upper bound of counting rangek - Digit to count (0-9)Returns:
k in range [1, n]Special Case:
k = 0, counts all numbers with trailing zeros after nUse Cases:
Example:
from pywayne.maths import digitCount
# Count digit 1 from 1 to 100
count = digitCount(100, 1)
print(count) # 21
# Count each digit 0-9 in range 1-1000
for k in range(10):
count = digitCount(1000, k)
print(f"Digit {k}: {count} times")
Multiply two integers using Karatsuba's divide-and-conquer algorithm.
karatsuba_multiplication(x: int, y: int) -> int
Parameters:
x - Integer multipliery - Integer multiplicandReturns:
x and yAlgorithm:
Use Cases:
Example:
from pywayne.maths import karatsuba_multiplication
# Compare with standard multiplication
a, b = 123456789, 987654321
result = karatsuba_multiplication(a, b)
print(result) # 121932631112635269
# Verify
assert result == a * b
from pywayne.maths import get_all_factors
def is_prime(n):
factors = get_all_factors(n)
return len(factors) == 2 and factors == [1, n]
print(is_prime(17)) # True
print(is_prime(18)) # False
from pywayne.maths import get_all_factors
def gcd(a, b):
factors_a = set(get_all_factors(a))
factors_b = set(get_all_factors(b))
common = factors_a & factors_b
return max(common)
print(gcd(24, 36)) # 12
from pywayne.maths import digitCount
def digit_frequency(n):
frequency = {}
for k in range(10):
frequency[k] = digitCount(n, k)
return frequency
print(digit_frequency(1000))
# {0: 189, 1: 301, 2: 300, 3: 300, ...}
from pywayne.maths import karatsuba_multiplication
# Very large numbers
x = 123456789012345678901234567890
y = 9876543210987654321098765432109876
# Use Karatsuba for efficiency
product = karatsuba_multiplication(x, y)
get_all_factors returns sorted unique factorsdigitCount counts from 1 to n inclusivekaratsuba_multiplication is optimized for large integers (hundreds+ of digits)* may be faster due to overhead