[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