[ruby-dev:49548] Re: Integer#pow の提案

From: Yugui <yugui@...>
Date: 2016-03-30 13:40:05 UTC
List: ruby-dev #49548
WXVndWnjgafjgZnjgIINCg0K57Sw44GL44GE5a6f6KOF5LiK44Gu44Kz44Oh44Oz44OI44Gv44GV
44Gm44GK44GN44CB44G+44Ga44Kk44Oz44K/44O844OV44Kn44O844K544Gr44Gk44GE44Gm5Ly6
44GE44Gf44GE54K544GM44GC44KK44G+44GZ44CCDQrjgZPjga7mvJTnrpfjga9tb2Rwb3fjgajl
kbzjgbDjgozjgovjgZPjgajjgoLlpJrjgYTjgajmgJ3jgYTjgb7jgZnjgYzjgIFJbnRlZ2VyI21v
ZHBvd+OCiOOCiuOCgkludGVnZXIjcG9344Gu44G744GG44GM6Imv44GE55CG55Sx44Gv5L2V44Gn
44GX44KH44GG44GL44CCDQoNCuWAi+S6uueahOOBq+OBr+OAgTHlvJXmlbDjga5JbnRlZ2VyI3Bv
dyhuKeOBqOeVsOOBquOCim7jga/mlbTmlbDjgafjgarjgZHjgozjgbDjgarjgonjgarjgYTngrnj
gafntZDmp4vnlbDjgarjgovjga7jgafjgIHliKXjga7lkI3liY3jgafjgYLjgaPjgZ/jgbvjgYbj
gYzoia/jgYTjgajmgJ3jgYTjgb7jgZfjgZ/jgIINCg0KT24gV2VkLCBNYXIgMzAsIDIwMTYgYXQg
NjoyNCBQTSBLSVNISU1PVE8sIE1ha290byA8a3NtYWtvdG9AZGQuaWlqNHUub3IuanA+DQp3cm90
ZToNCg0KPiDjgY3jgZfjgoLjgajjgafjgZkNCj4NCj4g5pqX5Y+344Gu6KiI566X44Gq44Gp44Gn
IChhKipiKSVtIOOCkuaxguOCgeOBn+OBhOOBk+OBqOOBjOOBguOCiuOBvuOBmeOAguOBk+OBruW8
j+OBruOBvuOBvuabuOOBj+OBqOOAgQ0KPiBCaWdudW3jgYzjgYLjgorjgb7jgZnjga7jgafjgqrj
g7zjg5Djg7zjg5Xjg63jg7zjga7llY/poYzjga/jgYLjgorjgb7jgZvjgpPjgYzjgIHpmo/mmYIg
bW9kIG0g44KSDQo+IOWPluOCjOOBsOacrOadpeW/heimgeOBruOBquOBhOmHjeOBhOioiOeul+OC
kuecgeOBhOOBpui7veOBj+OBp+OBjeOBvuOBmeOBl+OAgeOBqeOBhuOBm+OBquOCiee1hOi+vOOB
v+OBpw0KPiDoqIjnrpfjgafjgY3jgozjgbDpq5jpgJ/ljJbjgoLjgafjgY3kvr/liKnjgaDjgajo
gIPjgYjjgIFJbnRlZ2VyI3BvdyDjgajjgZfjgablrp/oo4XjgZfjgb7jgZfjgZ/jgIINCj4g77yI
44Oh44O844Or5pyr44Gr5beu5YiG44KS5LuY44GR44G+44GX44Gf77yJDQo+IOOCs+ODoeODs+OD
iOetieOBguOCiuOBvuOBl+OBn+OCieOCiOOCjeOBl+OBj+OBiumhmOOBhOOBl+OBvuOBmeOAguS/
ruato+OBruS4iuOBp+ODl+ODq+ODquOCr+OCqOOCueODiOWMluOBrg0KPiDkuojlrprjgafjgZnj
gIINCj4NCj4g5a6f5byV5pWw44Gu5Z6L44KE5YCk44Gr44KI44Gj44Gm5L6L5aSW44Go44GZ44KL
5aC05ZCI44Gq44Gp44Gr44Gk44GE44Gm44GvIFB5dGhvbiDjga7ntYTovrzjgb/plqLmlbANCj4g
cG93IOOCkuWPguiAg+OBq++8iCBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVu
Y3Rpb25zLmh0bWwjcG93IO+8iQ0KPiDjgZfjgb7jgZfjgZ/jgIINCj4NCj4g5Y+v5aSJ5YCL5byV
5pWw44Gu44Oh44K944OD44OJ44Go44Gq44Gj44Gm44GE44Gm44CBMeW8leaVsOOBruWgtOWQiOOB
r+OAgeOBneOBruOBvuOBviAqKiDjgpLlkbzjgbPlh7rjgZcNCj4g44G+44GZ44CCMuW8leaVsOOB
ruWgtOWQiOOBr+OAgUZpeG51be+8iGxvbmfvvInjgafpq5jpgJ/jgavoqIjnrpfjgafjgY3jgovl
oLTlkIjjga/pq5jpgJ/jgavjgIENCj4g44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5rGO55So44Gu
5a6f6KOF44Gn6KiI566X44GX44G+44GZ44CCDQo+DQo+IOOCs+ODoeODs+ODiOOBp1hYWOOCkuS7
mOOBkeOBpuOBguOCi+euh+aJgOOBr+OAgeODl+ODq+ODquOCr+OCqOOCueODiOWMluWJjeOBq+aU
ueiJr+OBl+OBn+OBhOeuh+aJgOOBp+OAgQ0KPg0KPiDjg7tGaXhudW3jgYwzMeODk+ODg+ODiOOB
izYz44OT44OD44OI44GL44CB44Gu5oyv44KK5YiG44GRDQo+IOODu+acgOi/keOBruOCs+ODs+OD
keOCpOODqeOBp+OBryAvKk5PVFJFQUNIRUQqLyDjga7jgYrjgb7jgZjjgarjgYTjgYzlirnjgYvj
garjgYTjgojjgYbjgarjga7jgacNCj4g44Gd44Gu5Luj5pu/44Gv44Gp44Gu44KI44GG44Gr44GZ
44KL44Gu44GM44OZ44K544OI44OX44Op44Kv44OG44Kj44K544Gn44GX44KH44GG44GL77yfDQo+
DQo+IOOBqOOBhOOBhuaEn+OBmOOBp+OBmeOAgg0KPg0KPiBkaWZmIC0tZ2l0IGEvbnVtZXJpYy5j
IGIvbnVtZXJpYy5jDQo+IGluZGV4IDRiYjJhMzIuLmM1YzdhZmIgMTAwNjQ0DQo+IC0tLSBhL251
bWVyaWMuYw0KPiArKysgYi9udW1lcmljLmMNCj4gQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMg
VkFMVUUgZml4X211bChWQUxVRSB4LCBWQUxVRSB5KTsNCj4gIHN0YXRpYyBWQUxVRSBpbnRfcG93
KGxvbmcgeCwgdW5zaWduZWQgbG9uZyB5KTsNCj4gIHN0YXRpYyBWQUxVRSBpbnRfY21wKFZBTFVF
IHgsIFZBTFVFIHkpOw0KPg0KPiArc3RhdGljIFZBTFVFIGludF9wb3cyKGludCBhcmdjLCBWQUxV
RSogYXJndiwgVkFMVUUgeCk7DQo+ICsNCj4gIHN0YXRpYyBJRCBpZF9jb2VyY2UsIGlkX2Rpdiwg
aWRfZGl2bW9kOw0KPiAgI2RlZmluZSBpZF90b19pIGlkVG9faQ0KPiAgI2RlZmluZSBpZF9lcSAg
aWRFcQ0KPiBAQCAtMzU1MCw2ICszNTUyLDE3NCBAQCBpbnRfY21wKFZBTFVFIHgsIFZBTFVFIHkp
DQo+ICAgICAgfQ0KPiAgfQ0KPg0KPiArLyogSW50ZWdlciNwb3cgKi8NCj4gKw0KPiArc3RhdGlj
IFZBTFVFDQo+ICtpbnRfcG93X3RtcDEoVkFMVUUgeCwgVkFMVUUgeSwgbG9uZyBtbSwgaW50IG5l
Z2FfZmxnKQ0KPiArew0KPiArICAgIGxvbmcgeHggPSBGSVgyTE9ORyh4KTsNCj4gKyAgICBsb25n
IHRtcCA9IDFMOw0KPiArICAgIGxvbmcgeXk7DQo+ICsNCj4gKyAgICBmb3IgKC8qTk9QKi87ICEg
RklYTlVNX1AoeSk7IHkgPSByYl9mdW5jYWxsKHksIGlkR1RHVCwgMSwNCj4gTE9ORzJGSVgoMUwp
KSkgew0KPiArICAgICAgICBpZiAoUlRFU1QoaW50X29kZF9wKHkpKSkgew0KPiArICAgICAgICAg
ICAgdG1wID0gKHRtcCAqIHh4KSAlIG1tOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIHh4ID0g
KHh4ICogeHgpICUgbW07DQo+ICsgICAgfQ0KPiArICAgIGZvciAoeXkgPSBGSVgyTE9ORyh5KTsg
eXk7IHl5ID4+PSAxTCkgew0KPiArICAgICAgICBpZiAoeXkgJiAxTCkgew0KPiArICAgICAgICAg
ICAgdG1wID0gKHRtcCAqIHh4KSAlIG1tOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIHh4ID0g
KHh4ICogeHgpICUgbW07DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKG5lZ2FfZmxnICYmIHRt
cCkgew0KPiArICAgICAgICB0bXAgLT0gbW07DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiBMT05H
MkZJWCh0bXApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgVkFMVUUNCj4gK2ludF9wb3dfdG1wMihW
QUxVRSB4LCBWQUxVRSB5LCBsb25nIG1tLCBpbnQgbmVnYV9mbGcpDQo+ICt7DQo+ICsgICAgbG9u
ZyB0bXAgPSAxTDsNCj4gKyAgICBsb25nIHl5Ow0KPiArI2lmZGVmIERMT05HDQo+ICsgICAgRExP
TkcgY29uc3QgbW1tID0gbW07DQo+ICsgICAgbG9uZyB4eCA9IEZJWDJMT05HKHgpOw0KPiArDQo+
ICsgICAgZm9yICgvKk5PUCovOyAhIEZJWE5VTV9QKHkpOyB5ID0gcmJfZnVuY2FsbCh5LCBpZEdU
R1QsIDEsDQo+IExPTkcyRklYKDFMKSkpIHsNCj4gKyAgICAgICAgaWYgKFJURVNUKGludF9vZGRf
cCh5KSkpIHsNCj4gKyAgICAgICAgICAgIHRtcCA9ICgoRExPTkcpdG1wICogKERMT05HKXh4KSAl
IG1tbTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4eCA9ICgoRExPTkcpeHggKiAoRExPTkcp
eHgpICUgbW1tOw0KPiArICAgIH0NCj4gKyAgICBmb3IgKHl5ID0gRklYMkxPTkcoeSk7IHl5OyB5
eSA+Pj0gMUwpIHsNCj4gKyAgICAgICAgaWYgKHl5ICYgMUwpIHsNCj4gKyAgICAgICAgICAgIHRt
cCA9ICgoRExPTkcpdG1wICogKERMT05HKXh4KSAlIG1tbTsNCj4gKyAgICAgICAgfQ0KPiArICAg
ICAgICB4eCA9ICgoRExPTkcpeHggKiAoRExPTkcpeHgpICUgbW1tOw0KPiArICAgIH0NCj4gKyNl
bHNlDQo+ICsgICAgVkFMVUUgY29uc3QgbSA9IExPTkcyRklYKG1tKTsNCj4gKyAgICBWQUxVRSB0
bXAyID0gTE9ORzJGSVgodG1wKTsNCj4gKw0KPiArICAgIGZvciAoLypOT1AqLzsgISBGSVhOVU1f
UCh5KTsgeSA9IHJiX2Z1bmNhbGwoeSwgaWRHVEdULCAxLA0KPiBMT05HMkZJWCgxTCkpKSB7DQo+
ICsgICAgICAgIGlmIChSVEVTVChpbnRfb2RkX3AoeSkpKSB7DQo+ICsgICAgICAgICAgICB0bXAy
ID0gcmJfZml4X211bF9maXgodG1wMiwgeCk7DQo+ICsgICAgICAgICAgICB0bXAyID0gcmJfaW50
X21vZHVsbyh0bXAyLCBtKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4ID0gcmJfZml4X211
bF9maXgoeCwgeCk7DQo+ICsgICAgICAgIHggPSByYl9pbnRfbW9kdWxvKHgsIG0pOw0KPiArICAg
IH0NCj4gKyAgICBmb3IgKHl5ID0gRklYMkxPTkcoeSk7IHl5OyB5eSA+Pj0gMUwpIHsNCj4gKyAg
ICAgICAgaWYgKHl5ICYgMUwpIHsNCj4gKyAgICAgICAgICAgIHRtcDIgPSByYl9maXhfbXVsX2Zp
eCh0bXAyLCB4KTsNCj4gKyAgICAgICAgICAgIHRtcDIgPSByYl9pbnRfbW9kdWxvKHRtcDIsIG0p
Ow0KPiArICAgICAgICB9DQo+ICsgICAgICAgIHggPSByYl9maXhfbXVsX2ZpeCh4LCB4KTsNCj4g
KyAgICAgICAgeCA9IHJiX2ludF9tb2R1bG8oeCwgbSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg
dG1wID0gRklYMkxPTkcodG1wMik7DQo+ICsjZW5kaWYNCj4gKyAgICBpZiAobmVnYV9mbGcgJiYg
dG1wKSB7DQo+ICsgICAgICAgIHRtcCAtPSBtbTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIExP
TkcyRklYKHRtcCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBWQUxVRQ0KPiAraW50X3Bvd190bXAz
KFZBTFVFIHgsIFZBTFVFIHksIFZBTFVFIG0sIGludCBuZWdhX2ZsZykNCj4gK3sNCj4gKyAgICBW
QUxVRSB0bXAgPSBMT05HMkZJWCgxTCk7DQo+ICsgICAgbG9uZyB5eTsNCj4gKw0KPiArICAgIGZv
ciAoLypOT1AqLzsgISBGSVhOVU1fUCh5KTsgeSA9IHJiX2Z1bmNhbGwoeSwgaWRHVEdULCAxLA0K
PiBMT05HMkZJWCgxTCkpKSB7DQo+ICsgICAgICAgIGlmIChSVEVTVChpbnRfb2RkX3AoeSkpKSB7
DQo+ICsgICAgICAgICAgICB0bXAgPSByYl9mdW5jYWxsKHRtcCwgJyonLCAxLCB4KTsNCj4gKyAg
ICAgICAgICAgIHRtcCA9IHJiX2ludF9tb2R1bG8odG1wLCBtKTsNCj4gKyAgICAgICAgfQ0KPiAr
ICAgICAgICB4ID0gcmJfZnVuY2FsbCh4LCAnKicsIDEsIHgpOw0KPiArICAgICAgICB4ID0gcmJf
aW50X21vZHVsbyh4LCBtKTsNCj4gKyAgICB9DQo+ICsgICAgZm9yICh5eSA9IEZJWDJMT05HKHkp
OyB5eTsgeXkgPj49IDFMKSB7DQo+ICsgICAgICAgIGlmICh5eSAmIDFMKSB7DQo+ICsgICAgICAg
ICAgICB0bXAgPSByYl9mdW5jYWxsKHRtcCwgJyonLCAxLCB4KTsNCj4gKyAgICAgICAgICAgIHRt
cCA9IHJiX2ludF9tb2R1bG8odG1wLCBtKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4ID0g
cmJfZnVuY2FsbCh4LCAnKicsIDEsIHgpOw0KPiArICAgICAgICB4ID0gcmJfaW50X21vZHVsbyh4
LCBtKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAobmVnYV9mbGcgJiYgcG9zaXRpdmVfaW50
X3AodG1wKSkgew0KPiArICAgICAgICB0bXAgPSByYl9mdW5jYWxsKHRtcCwgJy0nLCAxLCBtKTsN
Cj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHRtcDsNCj4gK30NCj4gKw0KPiArc3RhdGljIFZBTFVF
DQo+ICtpbnRfcG93MyhWQUxVRSB4LCBWQUxVRSB5LCBWQUxVRSBtKQ0KPiArew0KPiArICAgIGlu
dCBuZWdhX2ZsZyA9IDA7DQo+ICsgICAgbG9uZyBtbTsNCj4gKw0KPiArICAgIGlmICggISAocmJf
b2JqX2lzX2tpbmRfb2YoeSwgcmJfY0ludGVnZXIpICYmIHJiX29ial9pc19raW5kX29mKG0sDQo+
IHJiX2NJbnRlZ2VyKSkpIHsNCj4gKyAgICAgICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgIklu
dGVnZXIjcG93KCkgMm5kIGFyZ3VtZW50IG5vdCBhbGxvd2VkDQo+IHVubGVzcyBhbGwgYXJndW1l
bnRzIGFyZSBpbnRlZ2VycyIpOw0KPiArICAgIH0NCj4gKyAgICBpZiAobmVnYXRpdmVfaW50X3Ao
eSkpIHsNCj4gKyAgICAgICAgcmJfcmFpc2UocmJfZVJhbmdlRXJyb3IsICJJbnRlZ2VyI3Bvdygp
IDFzdCBhcmd1bWVudCBjYW5ub3QgYmUNCj4gbmVnYXRpdmUgd2hlbiAybmQgYXJndW1lbnQgc3Bl
Y2lmaWVkIik7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKG5lZ2F0aXZlX2ludF9wKG0pKSB7
DQo+ICsgICAgICAgIG5lZ2FfZmxnID0gMTsNCj4gKyAgICAgICAgbSA9IHJiX2Z1bmNhbGwobSwg
aWRVTWludXMsIDApOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmICggISBwb3NpdGl2ZV9pbnRf
cChtKSkgew0KPiArICAgICAgICByYl9udW1femVyb2RpdigpOw0KPiArICAgIH0NCj4gKw0KPiAr
ICAgIGlmIChGSVhOVU1fUChtKSkgew0KPiArICAgICAgICBtbSA9IEZJWDJMT05HKG0pOw0KPiAr
ICAgICAgICBpZiAoTE9OR19NQVggPiAweDdmZmZmZmZmTCkgeyAgLy8gWFhYPw0KPiArICAgICAg
ICAgICAgaWYgKG1tIDw9IDB4ODAwMDAwMDBMKSB7DQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu
IGludF9wb3dfdG1wMShyYl9pbnRfbW9kdWxvKHgsIG0pLCB5LCBtbSwgbmVnYV9mbGcpOw0KPiAr
ICAgICAgICAgICAgfQ0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgaWYgKG1t
IDw9IDB4ODAwMEwpIHsNCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gaW50X3Bvd190bXAxKHJi
X2ludF9tb2R1bG8oeCwgbSksIHksIG1tLCBuZWdhX2ZsZyk7DQo+ICsgICAgICAgICAgICB9DQo+
ICsgICAgICAgIH0NCj4gKyAgICAgICAgcmV0dXJuIGludF9wb3dfdG1wMihyYl9pbnRfbW9kdWxv
KHgsIG0pLCB5LCBtbSwgbmVnYV9mbGcpOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4gaW50X3Bv
d190bXAzKHJiX2ludF9tb2R1bG8oeCwgbSksIHksIG0sIG5lZ2FfZmxnKTsNCj4gK30NCj4gKw0K
PiArLyoNCj4gKyAqIGNhbGwtc2VxOg0KPiArICogICBpbnRlZ2VyLnBvdyhudW1lcmljKSAgLT4g
IGludGVnZXIgKiogbnVtZXJpYw0KPiArICogICBpbnRlZ2VyLnBvdyhhLCBtKSAgICAgLT4gIChp
bnRlZ2VyIGBwb3dgIGEpIG1vZCBtDQo+ICsgKi8NCj4gKw0KPiArc3RhdGljIFZBTFVFDQo+ICtp
bnRfcG93MihpbnQgYXJnYywgVkFMVUUqIGFyZ3YsIFZBTFVFIHgpDQo+ICt7DQo+ICsgICAgVkFM
VUUgeSwgbTsNCj4gKw0KPiArICAgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMTEiLCAmeSwg
Jm0pOw0KPiArDQo+ICsgICAgc3dpdGNoIChhcmdjKSB7DQo+ICsgICAgY2FzZSAxOg0KPiArICAg
ICAgICByZXR1cm4gcmJfZnVuY2FsbCh4LCByYl9pbnRlcm4oIioqIiksIDEsIHkpOw0KPiArICAg
IGNhc2UgMjoNCj4gKyAgICAgICAgcmV0dXJuIGludF9wb3czKHgsIHksIG0pOw0KPiArICAgIH0N
Cj4gKw0KPiArICAgIHJldHVybiBRbmlsOyAgLy8gbm90IHJlYWNoZWQgKFhYWD8pDQo+ICt9DQo+
ICsNCj4gIC8qDQo+ICAgKiBjYWxsLXNlcToNCj4gICAqICAgZml4ID4gcmVhbCAgLT4gIHRydWUg
b3IgZmFsc2UNCj4gQEAgLTQzMzIsNiArNDUwMiw3IEBAIEluaXRfTnVtZXJpYyh2b2lkKQ0KPiAg
ICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0ludGVnZXIsICJ0cnVuY2F0ZSIsIGludF90b19pLCAw
KTsNCj4gICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NJbnRlZ2VyLCAicm91bmQiLCBpbnRfcm91
bmQsIC0xKTsNCj4gICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NJbnRlZ2VyLCAiPD0+IiwgaW50
X2NtcCwgMSk7DQo+ICsgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jSW50ZWdlciwgInBvdyIsIGlu
dF9wb3cyLCAtMSk7DQo+DQo+ICAgICAgcmJfY0ZpeG51bSA9IHJiX2RlZmluZV9jbGFzcygiRml4
bnVtIiwgcmJfY0ludGVnZXIpOw0KPg0KPg0K

In This Thread