diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2022-04-04 11:06:28 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2022-04-04 11:06:28 +0200 |
| commit | d6c45c1e8fbd72ec613baff00a8214a270f3f6cb (patch) | |
| tree | 03e2a14b035bb6c23fd85222f448b2a4db4d274f | |
| parent | afb541c10466df9d9ca45c17f3056fd11a016e47 (diff) | |
| download | perlweeklychallenge-club-d6c45c1e8fbd72ec613baff00a8214a270f3f6cb.tar.gz perlweeklychallenge-club-d6c45c1e8fbd72ec613baff00a8214a270f3f6cb.tar.bz2 perlweeklychallenge-club-d6c45c1e8fbd72ec613baff00a8214a270f3f6cb.zip | |
Task 2 done in plpgsql
| -rw-r--r-- | challenge-159/luca-ferrari/postgresql/ch-2.sql | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/challenge-159/luca-ferrari/postgresql/ch-2.sql b/challenge-159/luca-ferrari/postgresql/ch-2.sql index da8824c0c2..d165df2fed 100644 --- a/challenge-159/luca-ferrari/postgresql/ch-2.sql +++ b/challenge-159/luca-ferrari/postgresql/ch-2.sql @@ -1 +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; |
