Project Euler Solutions by Ross Marks

<?php

// check if a number is prime
function isPrime($num) {
    if(
$num 0$num *= -1;

    if(
$num == 1)
        return 
false;
    if(
$num == 2)
        return 
true;
    if(
$num == 0)
        return 
false;
    for(
$i 3$i <= ceil(sqrt($num)); $i $i 2) {
        if(
$num $i == 0)
            return 
false;
    }
    return 
true;
}

// generate X no of primes (returns array): generatePrime(1000000);
function generatePrime($n){ 
    
$prime = array();
    
$return_array = array();
 
    for(
$i 1$i <= $n$i++){ 
        
$prime[$i] = 0;
    } 
    
$k=2;
    
$mul 0;
    while(
$k $n){
        for(
$j $n >= $k*$j$j++){
            
$mul $j $k;
            
$prime[$mul]=1;
        }
        
$k++;
    }
    for(
$i 2$i <= $n$i++){
        if(
$prime[$i] == 0
            
$return_array[] = $i;
    } 
    return 
$return_array;
}

//return prime factors of a number
function primefactor($num) {
    
$sqrt sqrt($num);
    for (
$i 2$i <= $sqrt$i++) {
        if (
$num $i == 0) {
            return 
array_merge(primefactor($num/$i), array($i));
        }
    }
    return array(
$num);
}

// get factors of a number
function factor($number) {
    
$countFactors 0;
    
$root sqrt($number);
    for (
$i 1$i <= $root$i++) {
        if (
$number $i == 0) {
            
$countFactors += 2;
        }
    }
    return 
$countFactors;
}

// get factorial of a number
function getFactorial($num){
    
$fact 1;
    for(
$i 1$i <= $num ;$i++)
        
$fact $fact $i;
    return 
$fact;
}

// get divisors of a number
function proper_divisors($number){
    for (
$n 1$n ceil($number/2)+1$n++)
        if (!(
$number $n))
            
$divisors[] = $n;
    return 
$divisors;
}

// perfect number? perfect(number, divisors_of_number);
function perfect($number$div_count){
    if(
$number == $div_count){ //perfect number
        
return "p";
    }else if(
$number $div_count){ // abundent
        
return "a";
    }else if(
$number $div_count){ // deficient
        
return "d";
    }
}

//get triangular no from position
function triangularNumber($_x){
    return ((
$_x 2) + 0.5) * $_x;
}

// is number even?
function iseven($no){
    return (
$no FALSE TRUE);  
}

/// checks if a number is pandigital (e.g. 12345 contains 1-5)
function isPandigital($number){
    
$nos strlen($number);
    
$count 0;
    for(
$i 1$i <= $nos$i++)
        if (
strpos("$number""$i") !== false)
            
$count++;
    
    if(
$count == $nos)
        return 
true;
    return 
false;
}

// simplify a fraction
function simplify($num,$den) {
    
$g gcd($num,$den);
    
//echo "denominator: $g - ";
    
return Array($num/$g,$den/$g);
}

// get common denominator of a fraction
function gcd($a,$b) {
    
$a abs($a); $b abs($b);
    if( 
$a $b) list($b,$a) = Array($a,$b);
    if( 
$b == 0) return $a;
    
$r $a $b;
    while(
$r 0) {
        
$a $b;
        
$b $r;
        
$r $a $b;
    }
    return 
$b;
}

// shift a string eg.  197, (-1) 971, and (-2) 719
function str_shift($str$len) {
    
$len $len strlen($str);
    return 
substr($str$len) . substr($str0$len);
}

?>