CodeIQ「コモン・マルチプル」問題 みんなのコード
CodeIQ「コモン・マルチプル」問題、明日10時で公開終了です。挑戦された方は終了後よろしければハッシュタグ #コモンマルチプル でコードの公開をお願いします!
2015-04-02 21:48:34(ΦωΦ)<gist.github.com/yuppe19/efc3db… Rubyだと83バイトだった。やるなRuby #コモンマルチプル
2015-04-03 10:12:38さて。では。時間も過ぎたのでネタバレ #コモンマルチプル #CodeIQ 答えは数式として (Π[p:prime](Σ[r∈N][n/p^r])*2+1))+1)/2 と綺麗に書ける。
2015-04-03 12:34:03#コモンマルチプル なので、Rubyだとほぼ1ライナー。ideone.com/oY65bj Cに素直に移植した時の文字数は…118文字。なんとか、1ツイート内に、収まりました。( サザエさんの声で )
2015-04-03 12:36:57#コモンマルチプル C(118)→main(p,m,i,r){long long s=1;for(;p++<(m=50);s*=r){for(i=r=1;++i<p;m*=p%i&&1);while(m/=p)r+=m*2;}printf("%lld",s/2+1);}
2015-04-03 12:38:23#コモンマルチプル 実は m*=p%i&&1 としていた所は m*=p%i>0 の方が短かった…。これでC(117)
2015-04-03 18:54:15素因数分解が面倒だがRubyとか使うのイヤだったのでAWKからシェルを呼んでみるという暴挙 #コモンマルチプル ideone.com/UIRBJT
2015-04-03 13:14:09Rubyのすごさを実感しました。階乗ってそのまま書けるんだ… ideone.com/Da5r3A #コモンマルチプル
2015-04-03 14:08:03Cだとこんな感じになりました。 twitter.com/mist_fog_/stat… twitter.com/paiza_run/stat… #コモンマルチプル
2015-04-03 14:13:45@paiza_run c:d[51],i,k;main(j){long a=1;for(;i<51;j=++i)for(k=2;k<51;k++)for(;j%k<1;d[k]++)j/=k;for(;--i;a*=d[i]*2+1);printf("%ld",++a/2);}
2015-04-03 14:10:24Ruby で解答すると簡単すぎる気もしますが ideone.com/qO1X3N #コモンマルチプル 問題 codeiq.jp/q/1382 @riverplus @codeiqさんから
2015-04-03 20:12:44ライブラリなしVB版です。解説通りのアルゴリズムでした。 ⇒ @riverplus #コモンマルチプル ideone.com/hZozbf
2015-04-03 20:30:38n=50;a;i;c;main(p){double x=.5;for(p=2;p-n-1;p++){for(i=2;p%i;i++);c=0;for(a=n;i==p&&a;c+=a/=p);x*=c*2+1;}printf("%.0lf",x+.5);} #コモンマルチプル
2015-04-03 21:58:25#コモンマルチプル 色々なコードがあるな…。参考にさせてもらったらC(112)まで縮んだ。 ideone.com/vO9U1A
2015-04-03 23:45:39@henkoudekimasu 本当だ…。有難うございます。あれ? なんで精度足りてるんだろう…。( たまたま? )
2015-04-04 00:19:37@henkoudekimasu え…。%.f なんてmanに無いよう…。と。精度の件分かりました。x87の80bitレジスタ上だけで回して、最後printf用に64bitで保存するので実質floatじゃないんですね。float詐欺…? 最適化レベル落とすと精度不足に陥りました。
2015-04-04 01:06:43CodeIQ「コモン・マルチプル」問題、公開終了してました。ラフですが解説はこちら。riverplus.net/codeiq/anpan.p… 正解者のほぼ全員がこの解法一択でした。・・・そしてなぜかTwitterではコードゴルフ大会が繰り広げられていたのです。
2015-04-04 00:15:41issasiさんからもコード頂いてます。ideone.com/4cjs9u #コモンマルチプル (元のコードはideone用のコードでないので値が変わっています)
2015-04-04 00:33:58というわけでC(110)まで縮んだ #コモンマルチプル main(p,m,i,r){float s=1;for(;p++<50;s*=r){for(i=r=1;p%++i;);for(m=p-i?0:50;m/=p;r+=m*2);}printf("%.f",++s/2);}
2015-04-04 01:20:47