diff options
Diffstat (limited to 'challenge-159/luca-ferrari/postgresql/ch-2.sql')
| -rw-r--r-- | challenge-159/luca-ferrari/postgresql/ch-2.sql | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/challenge-159/luca-ferrari/postgresql/ch-2.sql b/challenge-159/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..d165df2fed --- /dev/null +++ b/challenge-159/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,43 @@ +-- Perl Weekly Challenge 159 + +CREATE SCHEMA IF NOT EXISTS pwc159; + +CREATE OR REPLACE FUNCTION +pwc159.prime_factors( n int ) +RETURNS SETOF int +AS $CODE$ +DECLARE + factor int; +BEGIN + factor := 2; + + WHILE ( factor <= n AND n > 1 ) LOOP + IF n % factor = 0 THEN + n := n / factor; + RETURN NEXT factor; + ELSE + factor := factor + 1; + END IF; + END LOOP; + + RETURN; +END +$CODE$ +LANGUAGE plpgsql; + + +\set n 5 + +WITH count_prime_factors( c, cc ) AS +( + SELECT count( distinct pf ), count( pf ) + FROM pwc159.prime_factors( :n ) pf +) +SELECT :n AS number, + CASE + WHEN c - cc <> 0 THEN 0 + WHEN c % 2 = 0 THEN 1 + ELSE -1 + END + +FROM count_prime_factors; |
