鳳鳴は祖父の俳号

日記 メモ そんなの

各桁の和の整数乗がその数自身となる4桁の整数解を求めるawk編

こういうツイートがあったので、まずawkで。
https://twitter.com/i/web/status/797584909359464448

 各桁分それぞれをループ、4桁の整数pと各桁の和sを求める。繰り返しsで割って行って割り切れなければハズレ、最後まで割り切れたらアタリ。和sが1の場合はなんでも割り切れてしまうため除外。

BEGIN{
        for(a=1;a<=9;a++) {
        for(b=0;b<=9;b++) {
        for(c=0;c<=9;c++) {
        for(d=0;d<=9;d++) {
                s=a+b+c+d;
                if (s==1) continue;
                p=a b c d; p=p+0;
                t=p;
                while((t%s)==0) {
                        t=t/s;
                        if (t==s) {
                                print p,s
                                continue;
                        }
                }
        }
        }
        }
        }
}

 別解。和sが1になるパターンを避けるために1001から9999までループ。各桁を文字列に分解してから和sを求める。

BEGIN{
	for(i=1001;i<=9999;i++) {
		s=substr(i,1,1) + substr(i,2,1) + substr(i,3,1) + substr(i,4,1)
		t=i
		while(t%s==0) {
			t=t/s
			if (t==s) {
				print i
				continue
			}	
		}	
	}
}