HackerRank SQL(Advanced, Medium) 解法 | Print Prime Numbers

問題

www.hackerrank.com

解法(MySQL)

  • infomation_schema.tablesを用いて,十分な行数があるテーブルから2~1000までの連番を作成する.
  • 全ての被除数について,その数より小さいもので割り切れる除数があるものを抽出し素数判定に用いる.
  • 列挙した素数group_concat()で結合する.
with number_table as (
    select
        @num := @num+1 as n
    from
        information_schema.tables as t1,
        information_schema.tables as t2,
        (select @num := 1) as tmp_table
    limit
        999
)

select
    group_concat(divident_table.n separator '&')
from
    (select * from number_table) as divident_table
where
    divident_table.n <= 1000
    and not exists (
        select
            *
        from
            (select * from number_table) as divisor_table
        where
            (divident_table.n % divisor_table.n = 0)
            and (divident_table.n > divisor_table.n)
    )
;