Current work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. Work in this area has resulted in the practical use of results from number theory and other branches of mathematics once considered to be only of theoretical interest.
This problem involves the efficient computation of integer roots of numbers.
Given an integer n>=1 and an integer p>= 1 you have to write a program that determines the n th positive root of p. In this problem, given such integers n and p, p will always be of the form k to the n th. power, for an integer k (this integer is what your program must find).
This problem involves the efficient computation of integer roots of numbers.
Given an integer n>=1 and an integer p>= 1 you have to write a program that determines the n th positive root of p. In this problem, given such integers n and p, p will always be of the form k to the n th. power, for an integer k (this integer is what your program must find).
Input
The input consists of a sequence of integer pairs n and p with each integer on a line by itself. For all such pairs 1<=n<= 200, 1<=p<10 101 and there exists an integer k, 1<=k<=10 9 such that k n = p.
Output
For each integer pair n and p the value k should be printed, i.e., the number k such that k n =p.
Sample Input
2 16
3 27
7 4357186184021382204544
Sample Output
4
3
1234
题意:给出n和p(n<=200,p<=10^101),求方程k^n=p的k的正整数解,保证k<=10^9
题解:这道神题传说有非常神奇的解f♂a
![POJ - 2109 Power of Cryptography(高精度log+二分) POJ - 2109 Power of Cryptography(高精度log+二分)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9aR0YwWVRwcGJXRm5aVHRpWVhObE5qUXNhVlpDVDFKM01FdEhaMjlCUVVGQlRsTlZhRVZWWjBGQlFWRkZRVUZCUlZSRFFWbEJRVUZCTWpoeVRuUkJRVUZuUVVWc1JWRldValJCWlRFNVVESXZhbmgwWWl0dmVDOWxMMnBpTlRoM1YydENXR0Y2SzFGSk1HTnBLM2R1WWxoT1NXOVlZbVJPU1VaVmJHcE9aR2RoT0VKMGVIUlJlRmRNZUU5eVUwZHRPRU5PZVhReFF5OTNNbk5NTlVGbVRESkJjRk1yVVZwSmRqZEVabXBwZWtoRGJ6UllRa2xWWWt3clZVOVNSSGRDWWtwdFZHeDZlbXBRYXpSamVIZEVjQzlYWmk4dk56TjNaMEV2ZGtkUVpqaG5VRTU1U2tGQ1FuRkhkMUE1Y20xTU1EQnNkMmRSUVZGalFrOW5SVWhGUWpSVFoyRlphSE5LTkZRclJIcEZNRlZWVEM5VksySm5WM1o1VjNkMWRFTXZNak4wYTNsc1ZYZ3JWSHBoYVRCSmVXdFVPVU00VDFSbFkyUlJZMDV4Wkc5YVFXcG9UMWxaTDJsNmRtcHFiblo0SzJnNVpIUXlZall6YWpkNVRrVTFlazlGV0NzdlRUZG9NVmhLU0doMWVtMXVkVmRJYkZkV00wMUZZM0I2UVVSUVpDOU1hWGRRZG5WM2MwUnRWSFpwTVZCamJtdGxOR1Z3Ynl0bVdXaElkVE5DZVRZclNXbDFhRE01VUd3ck0wOU5jMUpuVmtsSldrcDVRWFZwYTNWMWFHaG9hRTgxUmtNMU1GQlZNSGN2WkU1RU5tVlJhVFZJVUU4M04zSndjazgxVTJWUk9Ya3haSGs1WjNVeWVYSldSR1paTmxNMk4xaG1OVFJYUzB4eFpYcG1RVEZFWWxwVWMzTmFkVzluSzI1bUsyTlpVR0k1YzFZd2VWcGhVRkpWT1N0UlVTOVVSblJ3SzBoSFRWcEVSMFJPT0ZOa2RUSmxUM0J5VUVSeldTOUJiVTF5Y3pKM05YZHFSSG94WVZadUwzQmxlazV5WmpObFRITTNkMWd5Vm1kdWRVVnZTRTVKVTBOMlEwOVZkblJtTUdSU2MwWlFXVlJUVEc5dGFqaExOa3hsWmxOdk1XbHhTbHBHVURkcmJtZzVTSFpVWlVrNFQzUlpXamMzZGxKWWFsUnBLMGxxU2xOa1NtTTRWM0EwZW5sYVEzaHRValpLV0VreFVGVnNkVzFZVTNKSVMxSTFRVEpwT0VjNVZITlROR0ptUWxGTU1EVjJXVFk1VG5vNWFrZEpOMVp0Vld4WVRTdEhWMnM1VW1JM1VFNXFiWFphVTFneFQxcG5XbnBTV2pGdGVsQTRTbEZMWWxGNVJGUkZNVVIxTldVNU4xUk1PVFpuYW1KdFpWQm5jbmRNVFhaNWVuRmtTSE5pYlhGbWNteE5kMUpLYzFGc2RTOW5aMUV2YWxBNWVFVXlVekU1YmpWa1NWQlNNWGxHWlNzMFdXdHVlRGwzUmk5a2EyUkxPVVZsYW1KNGNHNXZTVmhsUVd0M2RURXpZbGhOTWk5c01tazFOMlYyYjBNd1NXTlFURlZMVjNNNWVsWjBkWEk0VTNCS1dESlphRGxyYVd3dlVVbHZhRTluWlN0SU1FbENXbHAxUldORk1XdGlaMlk1U1d4YVVVcE1aREV5UWtWV2NDOTRTMjUyVjNKb0swMW1VR05PVDI1VGJGUnJVMG92V2pGcFRtMHZWQ3RJWTNGblFtdFFkVTlLTjNSYUwwOHdXbXR1VG1GcWJFb3JaMll6TWtnNFRXTkpjREU0UVVWRlpubzNkalZTUlhVelEwMXhWRzltU0dsUE9HWnNkRGRKVkhOV1R6UlVaMk5qYURSUVVVVXlhbW81WkRSVVdtbDNSRUpwZUcxcE9IcEdOalpIUmpnM2JuUnhjbXhLZUVJNEt5dHViVXgzWTFveU0wUklaRFJWVDFCdVQxbGlMMkUwTXpkd1lXWjROWHBZWlNzNVMyVjJhMHgyZW5kSVpUVnlOME5RVFdKV1pWbFJlSFZ6YkdOb04xcHRWRlF4Vm5veVQwSjRLMU5xY0dGak5qTmpZVlJ5TkVNM2VqWjBVRGhwV0hwR2RXUllaRUZCVEdsTWJUTlJVVkZqU2paQmJIb3ZObVUwZG10WVlsVkJkVGR4SzJaWlprWjFVVXd2Y1dGc01tdEtOM0pOTlVacEsxaDFTbU5hWjJvdk5tbFpWRmxIWWtORVUybFRaVmw2V0V3MFJFSlBOV3hSTml0RU5tMTRRVGxWT0d0WWNDOXFSbE55ZGk5c2VtZHpjM2d6YWpaelkxRmtPR3hGYmtvM1RXTXlPVUpsVkZVMUt5dFpZVzVsVVZaaFNrZGxVbkppYmprMGRGUnVTREEzYW1aV2N6Um1Ta3hUT0RnMEt5OUZMMUV3UVcxWFRsZHJZV0pzZFhabVVVRk1jaXRqU1daTU1tRkVlRFk0UWxGU1YwRlBRa1p0VFVneGEwTk9VbGxvUVdwU1JIYzVaMUp4V2tJNVRrbFJTa1ZaUVd0RFpFRktURUZIU1hsRllXYzNRVzVSUTJSWE9XZ3lhMk5GYkdsQ1FVbzNRVVZKUTFsVVoySnZhbEZEWkZFNWVHRnRabFZTWjBOUlRISlBXVVkwV0dZM2VWWTBUa3hoYnl0VU4xaFlNMkU0ZEZWUGFERkJWMHMxVUhwM00ycFhVVFV4TldsSlEwZHZSV05LZVVSMk4yaHNTM1pPY0VadmRHTTNjazh6UlZaeGRVMTFXVzVCZUdoRVNXTlJTVTFLWkRSWmQyMVZSWEpTUjJGeVlVMWhNMlZXVUZwVGNHcElhVXRSVW1sRWFrSklWRzlMTUU5S1ZGUnFNRmx0Vm1wSVFrMVJhREJzVEhWbmJWWXhjR2xzVmpGSE1qZEhRMloxVEhWMldrUnlRbEpaVmtSSlluVmpSWGMzVGsxUFVEQm9ZM2xxVW5sRVFWVlBTakJUUjFwbFMweElhemh2WkZadEwweEdOR05NSzJ0UFpVTnphVzh3TW1kd0wyUnZMMnB2WjNkNlRtaHFlV1F4TUVWTmFqQkNOVlU0V1ZOMWVERnhOVEIyUVM4eGFHdERWRmQzU25OMFptSkpielZFYldSTk0xVXdMek5UVGpaaVpHNVBhWEJTVlhWTU5HaFFkUzlWT1c1QlRVOU5NRWhxZUdGSVVVZEhSWEU0VVZOeGVIVjFUemhCY1VjNFNHUkpSMDVvVTB0Mk0yNURiV2hCZUVaSFIxcHpNRTlFZGs5blp6UlFVVWRIUlhCalMyVllOVFpvWldwSVJVMUZaazQ1WWxocVdGQkRhRmwwUTI1bmRHRnlVRE13UWsxRlptdzBkbEJyU0RCbE5IWkxVRGxCWkdWSFIxcGpRVU5EVkZOcFVHYzVRVkl3VDFKV1MweEdMMDhyWm5obGFGSkxMMVJ6VkVwaGVrUjZNRkpGUVRGNU16RjRXamRsZVdKTFVHcDFiMUZZWm5kemIySlNSMjFJZVc1UlIweHJhVEpTUzB0UVJXeFBkVGxoUjBGQlNWaHZWRzh2VW13dmNrVlBSa1ZzT0c1aFlqSlVUVmh5V0U0M1JuZElWWEE0U2tOSVNYQnFjbEJTTUZwVlMweEZPRk5ZT1RkRmJqbGpXa0ZWT1VGWmFtUTVjbVZUU2taNk5EaHNNRWh5VVRsVFlWbEVkM2d4ZFdOR2RYQmFXbEJ6Y0dKckwzVXdXWEIwV0RocVZFSnJhMUJSU1ZWYVpqVXZPV0pKYjNodFlqbEZiMEYzUTBSRFZYVm5lRXg2UlVsRllVa3JRVTFDTW5CelMxVXdha0ZyVkVGcGQwTmtaMEpqVjI1cFVVTjZWVWRCVkhGQk5XSlZNVXhwV1VGWVFWUnZRa3g1ZHpoVFVWTmhaM2REWkZGSVVHRnRjRmxUUVZNNFF6WjZiVUpFV1dVclJuRTJaamsyY25SUFlXd3dUMjlDVVZsdkwzRnBjV1pCYVZFemQxcGxUVFZKY2tGT1FraExZMmRNZVM5YWFXcDRZVzlCVEZwbmMwOTNkRmhMVFdwalVqSkNPRU5QVlRaQmIyTlJOMkphU1RGUmIyMU1PVXBQUmxKRFlrTnpVMmRtTURScFFVbEtRbmhCYW05emJIRklSVzEzZDJ4c2RVWlBMeTlqYUdwd1NYYzFUVmQzU2xnNGIzUkpWR3d5WlZrcmFrOVhZVWMxT1doNGNuazFWakJMUVc5alZIQkJUWHBPYUhoTWNrVkhWRVZNVFRsVFYzcFphekpTWlVkWVRWSlpURWRzVjIxTVIzZEhWblo1YWxWVlRVMTZXa2s0VEdOSloxVjRVRkZJYTFGb2FFbzNTR1ZzWVc5alUzaHdUall2Um5WVGIwVnlUbmMxVjA1VWVuUlRObTVNUlRSVk9GRTJkMVJDYWtOM2VuVTFhVXhuUWtKRVdrRlRNV3RLV0ZwU2NUQTBiemhVUm1WbVpIUkdUbmhXWTJSS1ZtaFpSMkZaYzJSMVExQlFXV2cwVUZGRlIwVnhPRGhXUW1sSUszRlFVRk5rYUhoWUswWnRTakZJYVU1VFpsSkRkVzFvVkV4TlQwa3dTR292U1ZKalNHOURUMmxPUkdsVmRVVlFTbU5QU21NMFNGaDZUWGx5ZUVkaFRGWTRXaXR4Y1VaNmIxVkZWMHAyVG1oSFdVUkVSRTB5YlZCRE0wUkJTVTFLVXpaRVZYUlllWGxLZFVKaE9GUm1XVGxFUzNsYVRtWjJhVGwzSzNneUwwd3hRekUxY1hFMlVITTFkMjlQY25GVmFqZ3ZRV2hRWXk5QlJUZ3ZORWxQZDBrNFVIcDRXV2gzU2pWQlJWUnhWbFJpVFc1alRGZFRkMUYyTWtGcGNtSllRbFpZYWtVMlp6Um5NVVU1V1dwQmRHaElaMk5IUkdKRFJrMHJSV0ZuTkVGdVVVTkdWemhuY1d0alJYUnZNMEZsYXpabk4zRklSVWMzV25ZeU5ERkpLMVZVWjAxUmFtdFBRVWRIUldvNFJ6RkhlRnBvYUd4dVRXVkhXbkZwUTFFMGQxRmhTR3R4T0RSa1JHVnhhbE15TmsxRmR6UjVjVEZTYWxZd2VWUnBRbkJ2WTFNMU5HWXlXbXh0U2lzMUszTlNiM2xJUlVOWlJUSlpWREZoYW5wNlIxbDFiSFp5ZDNkWkwxQkdTVk5RVkhKekwxZFZPVXBPYlhJM1NtZ3JhRXhsVUVoUVVYZDRMMkU0Ums5YU5XbDRNVmRpWXpGUlozZHNUbWRZV2s5clNqZFlWbHBuV2pOcVlraHBkMHhrWTJwTU1EVlhiMk4wVjBkUVFrTnFiMUZNT1RaS2VFbHpXVXBJTURkUFVqRkhhMlJPUmpWR0swaEVUMmhSTlN0RWFVdzFTbm80TW5SemFXNHpNbGNyTURGRlNVNU5WRlZMTm1oellVaEZLMWtyUjFwVGVrSkhkemg2TDNaNVFVODBlbEZVVkRWRlNXZzVObk5VWWpkdmVVeDJRbkJvWVZObWFqSldWWGxRUm5WQ1JUWlBVVGhIT0U5TlVHRkJNRGxLVVZSUlIxTjJVa2ROYnpoVGNsaDRUV0pFYWsxVlVtVXZaMVIwVlRSVU9Vc3Zka1ZRTkZrMlpXaENSMWx4T0dsNmEyRlRlVzkwZDNkaGVVZGFZMFZ4SzJKYWJrbzFRVEF3VDBvNE1YVTNSRVYxZDB0eU1FdFpNMFlyWkdORVZGWXJhamxQWTBKaVpUazNRalZHWlRsQ1NFMUJWRVEwTmxCWlJrWnJibVJRTldoTk5pOTZia0pVUWtoRFpYSlFkMXBKVFZGalNHOURNblpNYldob1RHSlFVMGRZWkdKdFNVcGtaM0IwTlVWM05IZEtiVnBSYTJ3dmJtRlJaa1pTUlhOVVYycFlSVGxCWldkQ2EwMHlOMUZJVmpkRFZrMVpUMnhCUTBwWFdXaEJibEpHZDJoblRqRk9jRmN5UlZGRmFUUkZUMEZVYzBOSVEzTTRVbWRSV1doUlEyWlJiMDFoYlhGVlZFRm9kME5rWjBFNFZtNXBUVU5FVlV0QlZIRkNRbXBWTVZScFdVRlFaMlpYWTNkSldrUmlaVEV4T0VkWlRuWkZMMXAzYms1TGNIZFhPVll5U0dWT1VrMHpiM1ZsY1dSaEswMTBZVmwyYlRaNFlVUXZUVE5HYjBWalNubEVkblpqYkVzM1JqUldkMmgzVlc1ak9GRm1kVEp0TjA5T1dUSnRaMUpQVEZGUVJGWm9ibEJTUkVsalVVbE9SSGxYZFZWMGRuVk5TM2hhVW5sRVQzRXlVVGxrWkd0Q1FXaHJia2xDWkVNMk5rczFjazFTTW13NU9FOTNWak5oUm01YVFXbzRUVk4yUTNkclQwTXJWVEpPWWtaSWFXSndUbk52VUZReFlUWlhkbkpaV1dNeFNIWjZVRTFsUjJ4aVRta3dSRkUwYTB4bmEyVjBSVTR4Umt4c09WbHpRbEJ0WVRkTlJVOTVTRWhQZFhnemQxTnBZMGd3Y0hOaGRsUldTakpzTlRVelZVbE5XRFpPWnpWQ1JteDZaMnRsVWtVcmVrUkNhbWQ1TlM5dmVXcFVSVEZDVDNOTmJXaDRUbGxVZEU5WFJ6WkxOM2hvUm1kWFoybDNhVEV5VFhOTWJFdHRaMDB5V1ZsaldrWjNSRlY1ZWxGclozTm5UbWh0YUdoTGRrYzJTV0pxTlV3NFEwZFBjMGRYTkhkVVJHbzFkbWRFY0hsbVVUaEdSR2xrVlU0d1F6RnBRMU0wWTJkeU0zcE9kR1pJYTBzclJIVTRNbUprYWsxNFJFMU5lRFExWTFrME5rRktUMVF3UkdJd2RHaFJOSE5KVVZoaWRWaHNRVEI2ZW0xVlNteDBiamxyTTNVd00zSlhaMDlaVVVSb1JEbHRjV05UZWxZeFJsSm1WSEl6T0ZRNVJGaE1OM0p2VUZaQ2FuTjJTM3BrV210NmEyZFFaMGRJUjBKdk0yMHZSRXRWWlVKT2RFeG1UVWxhUVc1bFFrcExWWE5SWTBWdVQwaEJTR3BUYjFwYVZtdERZVFZzY3psaVZVdFFXVVZPZEV0M1ZIUmtaRTkxWkd0RFpEUkpjMmhUZVdaUlZHOUNUR0ZRVFZkelowRndWa2RuVFU5Q1UycGpVR3hUVFVNeU1HVkJWRzFFTjBkTVRVZEpiRUp3UWtSaWRrSkRXamwwUm05MFNFRXdNeXN2TmpZd2FXcFhWV0p1TlVWRlpYUm1hREIwYnpBd1QwRndkRE5CYXpSR1VFdDNZVUZ1VFUxcU1YSnZPRFJOUkZaWGRWbDJaVzVxV0ZONk1FdEhNazl5ZUVKR1ZqUTRVM2RqU2tWblFXcHpSRzlHYzFRd1FqRkJOak4xWms1NU9WUTFOR000WWtZd0syUldabXR4UTJaTlQxbzRZV3BuVVhrcmVqTTVWa0ZvV0ZFMlFVc3hUbXRLTTBwNmQwTnBWVzFrV2tZMmFsQTJWRkJ2ZEVoUVdEZFBTa2syYW5aeWIwZ3lhemRyZFhCcGRWWTBOMWhFTVU1dlZGWXhNRnBoTlhWb05HaEhWV3RXTmxwSlJHbDZjV1JWTWpRclVFVkxjakZqUm1kRGIzazJZMloxTVdOMWNuSmxSbWxPYUd0a1FYRTBWMFpuYTFaTFRVOHhaMFZOYVVWRmN5OURTMEZEYVVsSmVGcGlUV1U1UTBWRVZWVTFSM0EwTm1kSVVrNUJTQzlwYUUxME4zbExaWFJWZVdkYVp6Vk9kM2RwU1Vsb01FWldjVzF4Vnl0dE1HMTNNbGh1T0RGVlZubFFXREpoTm1wS1lYQTJlSFl6UlV0cmVXeHdOM0Z1VEVsd2NsVjBWVEZ1V2toc00xTTFaa1l4VlU5SVFWRTJOVkJQUm10V1VtdFRObHA2UzJ0VVdXczVLMFU0TW1sTlVFTnNOaTl4VTJOemNXMVlhM0IxUmtGYVVrSkZVbmgzTmxoVVpVaFRkME5IVWpkQmIxaDFjVFJPYmtGbFVYaHZibTlDTld0R1dWZE5Va3RFVFV4WWFXa3lNeTlsVVRWblEyNTFXakZpYVcxeWREVk5kbFpVVkhvdmRFOTJURzl6TjJWbGVHUnlOekJ0VEhSdVpIZHZOWFF2Y0c5TFRqZFBWak5PUVRONk0wbEtUMk41TWpBemRYVkVORVpZYjBGa1JHdG5WalZtTldVeGVGQm5ZVk5qY2xkUGFFeHVZa2MzU0RkdVYyRkRaamxMY3pCclRsRllhRWhvT1c1S1YxaHVSRzA1UmxKalFXNUdjVmxLV1c1alQxWlJSVlp1VVVOaVducGxVbTlwYVhOaWNrbGtXbVo1YzFJdk0xQk5ZWEpJYlVKMVVFeHNhR1VyVDNKdFJuQTNWRlpuYm1aWmFXTkpTbmRvYVdsTVRWRjJSbU0xWW1abFYwZDRZeTlPTW5GcE16UkdNaXRrUTB0NE5YWlhPVWhHUTFCbUwzUnJPWFowWmpaMlluQjNhRzE2T1M4MllrOVVVRzlqUkhCalJUWnVTWGhNYmsxQlkzY3dkamxPUlhsaVpFbDVja3ROU2xsSWJtVTBaek53VVhCcVQxVlFOVzlRWTFSclMwVk5ORmRPT1RGV01HUlBiM1pIVVRobWVVcFFja1J1WlhrclR6SjZUbG8xUW5SWVVuVlRiV0ZQYkRsMUt5OTZPVTVoV1VsalIwd3hUWEo1Tm5SR0wybEtRa0ZJSzBKaFdrZHJkbkJ6YzFGdmJXRlRaR2hSYUVkT05XSTRUbkZSYWxwdWIzQnBVVk53WWpOeFRqa3JjazQzYUhwRVNIcDRla0ZuSzNoaE4zUXJibmhVYWxSbk1GRjVUWGRLZVVkb1ZXcGFkR3h5U1hGdlJpdHllSFpDTkhJMmJrZHFia1JrTDNsU1ozbEljMDloT0N0YVdIQldkbXBpZWxaM1UyOHlNVEF2V0hCamRWaHVRazE0WTFGdWIyTnljMlU1YVZFM1MwSnRkRTlSU2xKVFQycHVibEpNYkd0bVJ6bHpWRTA1WkVkS2JubHRPV2xsUzFkUGJIbFhaa0V4VEdwbWVIUlFTV3hCY0dSVVN6SXdha1ozY2t4WVkwVnRjVFIyY0dGamNHczFTemRyUzI1dVZHMUpPWGcyUzFoTmVXTlJhbVpYWTFGQ1FXRlRabmwwUVZGTWQwOVpSMlF5Y1ZWamQzVktRMVJITmtzMVFUZGljVlJpY2xaU1ltWldTV3hFVjJzdlMwRmFVMHR1V1VOYVRrUTBRV3BoYm1saloxTlhSRUZsTWpNNVYxcHRlVFp0Y1ZOdlpWUjNabEJQZFZsTlpqWjFRVkZNT0VaMFRIQkJUMDlRUlZsQ1dHRlpORTAyWWtnMmVEQkpja3QwVlRrdlVWaHFaSGRoUW1wMmNuZHFjeXRWZWpaTmJUUkdXVlY0S3k5WlVYVkpiMEZ5WjBoaVNISTFOMnhOZUZFMGFqSkRlalp4U2xGQ1ZWRXlVSFIzYjBGdloxVkJZMmt3UjFGRk5rRlRZVE5RY1RCdVVXZEJiMEpRWjFwVlFVVkhielJCYmxWRVJFeDNRMkZVZDFSdlFraG5Ua1ZKUjBkSk1FRnVNRkJCVEdkUFdWUkJWRzlDV0dkT1JXOVBSVWt3UVdzd0wwRkxaeXRWVTBGVWIwUllRVUpHYjA5QlNqQkJaekl2UVVkbkswVmhRVlEwUkZaQlFrSnhUMEZLTVVGM2VUaEJiV3M0UlRaQlVqUkVVa05DYUdsT1FVbzVSSGRETkVSdFJYZEZOa0ZXTkVSU1MwUm9RMDVCU2s1UWQwTnZVR3hGWjBVMlFURjNRVkpoUkdkRGVUVXlRVk13VHpKRWJVRjRURnBoYUVGcmRVeFRUazUzSzJaUGExTXZRMGxEUWtOQ2VsTkhkek5CYkhOeWNUUmpVMVJIY0dnemQyWlFlV05JVkhoTlFrbHlRVGxDUTNKblFreGFia2hEVlZSQlUwdDNTRUZITDBVM1JGcGtNazByZG10VFZXNVhZWGd2WTB4ME9IWjFSMFZtWkhaT1VuUjNSMlJhYUZVeVJVOTNOalZLT1hZNVR6QkhMekZOVmxGemRrcHhVSE5PZDNkdk1GRTFUWFpRTmtsbFpscG5NRlZuTm5kVWEzQjFkVTlGYURRdmIxTk9TMDVySzJGalFXbFhOV0l5WTJwdlFYbzBabWRVYldGT2RXbFlTVlE1UkhORU9XRXhOM2hSTURRM2FXNVBkMjVNTVdwVVF6UlFPVTlqWmt4TlVVZFFlVkZ0UmtjNFdUVldWRGxpTUhSNmN6VlZTVzVFWjBOSFUyTm5TVGxJZWpscGJ6QXpielJOTm5rd1JIWjFkWGxhWmpOdE4wUjJiR2t6TTBOSFdtVnZTV1Y0U1ZSV1ZXNUlPR3dyVVdwMFkycEZabGxOYjJWTmRrOXRORTlFUWpSVFQxRmpVVWszVFdOc2JUZFRNVkp2V2poc2RVVlVRbTlwZW5Ka2RYWktla1oxUlV0MFRVOUZTVWROUlRKblRGcFRNbTExU2l0S1RsZHNWMWx3TURKM2RWWlJWV1JrYVZCeWVrVjVSMGhtTVZKcGEzazNiVFJHVUZVeVZXNXJNM2RqZDNKQmFXUjJUVnBvWVhkNGJ6VmtlQzh6UkVaYWJESkVWekJoWVhWWFUzaHVSMEY1U2xGSlVWSTRhRXRVTlhKTlVrTXlhSE5yYWsxUmRUUXlNWFYxVWxGTWNtMUhPV3BaYTFOUVYydHdkVnBzTUcwM2R6QnFNbmw0WjA5ck0wdGxTbW95VGxaTmRrZFBWRkk1Vms1YWJEUkVRak12Y21sVlFrNWhZMmhyYkhZNFIzSTJTWEpJVDJNMU0xQnJVV2xEWTJSWlpWazBPSFpMYlhwck9VbDZTbTVEWjNkbFNHcHpSR1ZEVlc0elFYRkJkemRKTkVGcVExQnJaWGR0VUZweFdXTnRXR3M1TkZCRVZXOVRURkZVUTJWM1RITlFkWFYxVlU4NVpYRm5NMjh4UVc5TFlrUm5WV0V3U0Zrd2EwRm9kRUpKVUU0eVdVTk9VMHRaVVVsRlNVZEVVVmxDVHpSSFEyRnBiMjlUWjJVd1oxRkRaWGRJVm5kd2JGRm5ZMFJCU2pCQloyWlVWa1pUVlVOSGQwaEJWSEZDTjJWQ1MzRlZWR2RaUWtOblJYcHBXWEJ4UzJsU1IwRTNRMDVCU21KQlpGaFRhVlZEUWpSTlFXNWpSRUpPUWxWV1NsRk1ZbEZaUWs5WlJIVTBWV2x2VWs5Q1owVTJRVkZQY0hGdGIwdENTRmxFWjBvd1FYUjJRbXhXUzBwM1RVVm5VVU5rZDAxRk1VWlNXVzVCWkdoRFowVTVaMDl5Y0ZKTFFrRTBSMEZVY1VKbk1tdHhTMnR2UlhSdlRVRnVZMEl5WTB0V1ZVbHVRWGREVGtGS1NFVjRWRlZXUldselFqQkZOa0ZUTW1kNWRXeEZiMGRFVVZORVprTmpVVEJaZFZodmRTOWFiMkl3ZUZSV2J6WldlVXRQYm1aRVkzY3ZiMU0yVTJoV1pXZGhUMmhLZVU1UVJWbEdOa2x3UkhaQ1RtRjVUalpaV2xndmRVOVlTM1pUT1ZGMWNFUTBaakpyVUhKaE9GQkZjbGxFY1dkSk1XZG1WbHBaT0UxQlZIbFFlbEkyWmtsVmIzVnhjU3RQWlRGVU0wVmhibkVyYzNCVU0zb3hlRmRJV0hodFRrRjFRWFpzWXl0VVJHd3lhMGh6V0c5MFRFVkZSVXR2SzBGd2VXTlJVRGd5Ums5a2FHMUlVbHBVVkU1bE56TXhaSEJyZERaTGJpOXhWSFoxVkhaWlEwUkZVSEZPZFc1SU5sVTJiVzQzTUVwblVHb3pRVEJJUzBsMmMyODJSMGREYnpWeVdWTnpWazEyVm5WcmFEbGthV1pFVkhKUVVFRTRkbGxvWldaQk5WRnFiMnBtTW1aSVJ5dG1RM0JWYUZGS1dXaFlOVkI0V0U0d1VUaEVSVkZMV2paV2JWQnJia05IWTB3eWNGZEZSR0ZuV0VOVmRWQmFhVTk1UjFsR2JWVlNaMmRSYVM5b09FWnRWWHBrYmxSTmExTmxXbWN5VXl0MVVtTnhiRFZVVG0xWlJWTnJkbGhrWVdGeWFrSnRTWHBOYkhoTWQwbHpTbkZHV2tkRlZrRndTWGQzYzNRelptTlRLMHRGUlZOU1dtSTJZbWhqWkVWdlFUUkpaVWh2UTNrNU1tTlpVbVJQT0hoWmRVdzFaV0p2TDJOeE5XZEJTbU5RUzNsdVl6UlhWREZEY1ZoclpHNW5URXhqZDJsc1YxbHdaR1JsU0ZsUVNVRkJOalpoY0ZOU05URnVhWEJOVW1sd1RYaHNZMGxFU1d4QmNrSk9XbmxCY25SRVdVbEtLemwzTjJoTVJVbFZVbGxvYlc5a2VUWXpTV2RCUldSblowRjBkSGhCYm1OUU1FeDZSbW81VkZWdlZFTm1ka1l5YkVveFFsRmtOVzF1WmtwdVpWRnJSVlpVUTBsRGFEUkxRWGgzYmtsd1JtOU1jbUpxY2xCU01UQXhRMUptWlhWSmRIbzNkekpVY3prMk5taFdZbEl3TUhOTWNEaFpla3BQYTNweVpGQmpaR0ZpV1hSRVVrVTBUMWg2TUVreFdEWm1URzFCYkUxUVVtczFOblZ2T0hCbVVuTjJNVk5xUVdSNFRUaHhkUzlIVVVoQ1EyVkRUVlIyU1V4TlNWVkpTRU5aUTNwaFZXaHJNV1ZGTTFwSFpteE9VWGRHY1RsTFYwaHhXVEYzUXpGaWFtZERibkExUVZGNFFUVjJkRXQyUVdKMFNGTkpPV1JLYm5GT1VVNDNjbmMwWWtGUmVrOWlaekJDZW01WlF6QTRaRlZOUTB0aVFXVXljMGRaTTBsRVFrTkdkMlJrZVdOeE5FTlhUbWh4UWpWbk5FaEhkRE56VGtvMFNVeENRbTlrYXpsbloxRlFNMmxGUW1wRllVRlVZVWQ2VkRBelFXbHZRa1Z2WkdkSlUxcGtaSEZOWVV0UFZuZHpVbkZFUlVNclZrZEZTM052ZFVGSFlUTm1SbVJsTkhkMVFYQm9SMEl2U2pkQmQzZ3lRVFV6VVVGMlJXRkpVVTB3VW5sSVkwTk9WR1ZqTldoRlFrbHhRVkpMU0ZsRFoxVlVVMk5UVFVOU1MwUlBRMGRUWkdkRGVWcHNZMjVCSzNwUVoyUnZNSFk1ZEZGYVRHUndSMEpIY1VsUlRsbEtlVVprTVRWS1RXSTJVRXQwVVVFd1ltNURXVkpCVW1WQ2NrSk5kMDlhTkVaM1JsRXJkbk5IVGtOQ1EwSlBhVTlSTjNkVWNXSkVWblJKZDBwRlNVVkhRVlJwUTBKbmFuUkZiMHByU1RWRWRVSktPRGhDTTBSc2FIUnpNRVZwVmxsVVoxUnZhbXRQT0VWS1RqUXJRazVFYUhOMVJUWllkME13YWxGbmQyeEthbGhCUWtadlQwRk1OVkJaUjBkQk1GQjZhVlZDVkVWTFFWUmhSWEJNTURBMGFXdEpUa0YwV2pGQlZFaDBWM2xKZW5OYVZUZ3lXSGxNVjFoNVFYVk1TamhFYWtSeWRFMW9XVmcxWkRGaFYzUnZWMko2VjA5dWJXSlNjRE40VEZkYVNWTnJkVmRLV0dkM2NVTXdTVTVGWWs5a1pETnBNRk5GTDB0UFFsWkxZMHR0VlZZek9UbERUMDVpWTNKM2VHMWFjbmhVYzI1T01rOUViMnQ2YlRCR1Uzb3hObVZ0VFdoUGVVcGtWMVpMZFZSM1ozTTNWVGd2YzNrMk9XVllVMnRHVjBKWU9HeElhR1ZpY1hCVGFrZFZSVUppYkhCUWJYbHVSMUJsTjBwMU1IRkpkV001VGpOa1Uzb3lRbGRGSzBjMWNFaFVOWFJzVkZwTFJGVkRjMkpDYkVWcmVrZDVTMWxWTVUxdE1GWlNaME5wZVcxbFlrMVBWbEJIVG5SUVNYUm1UblpSTm1KVllXVnZVM2xxYm1KQ2JIVm1OMUExTkZGVE9XNURPR2h0V0U5SVRWa3lWRWRhV0RGbmNuRkNRa3QxZG5OWkwxRlVNMnRTZGpGT09WQXdZMk5WVkdRMU5qbFdWemRLTVVSSFRubHlNalZCYVROd2VITnJRMEpEVURadFZYTk1jVkJSV25aUVRVcGhWRGNyVWswdkwxVkhUMjUxTUc1RE5Wa3hWMlpxY0RKNVVUSmlVR2RFTVVKMVozTjBRWEJRYUZsQlZETkxaek54VkUxTmFscHJOMHB2TDB4Rk5IQkJVVUZsY2trdlNVeHNURXczZWpGTFduTjRkMHhXVkROd2NIUlZkbTFhVUhwekx6UXZXV1V2T0dFdmIwaFBabEpQV0RSTloxRTRMeTlITjJ4WE4wOHJMMlpaUlVacFUydDBjbVJVU2t0WWVUbEpkRGRCY2pCM2FrRktRVUZvYjNOemRFOVpMMFJSSzI0d09XYzJkV3RLU2sxVGNWZHRZVFppVUhnMFRrZFRiV0ZqVlZkbGFVRnlaRGw1VEdSV1VUWmhaRXBYUzFvMEswUXZWVEF4YlV4R0wydzBWV2h2UnpKNldrdHdhVlp3ZEdWaVNuWTVNSGRMT1V4U01YUjJabXBDTkZWRmFEUlVRM2xsY21wWE5ETkdLMmcxWlhGblptZzRjbWgxVVRaaGREZ3djamR6VkV4VFpIRnhTRnBDZFZscU0xWjRSbEoxVVZkaU5ISlZObmxMYlhweUswNVljVVJZT1RKNmNUTlRaRlpHYm5NeGQyNXZSM3BzT1VVNFduTjRPVXRSZVdNeVlYZzBTM01yTkROcFNVWjNXbmxxY25aalRVcDRVRkJHZDBsclIzbHZRbk53VGpkUVVFNHdhRnBrWVZCdVNsTmlRMnBpTjBkUlYyaGtSV2hpYm0xRU0xcGFiREZYZW5OQmJuUXdRbEIxTjNFNFptSnJkVGRYTlRscmN5OXFRa1Y0Vms5eVNrMDVOMmxXU1RCc01WSm1WekYwTW0xYWFWWTFiR1F5VWpodmFGTXhTR0ZaVlRsdFRtUlRiWGhhYldWd05rTTNTV2xZV1dKeVVFVkRiRFJtVUZOemJFdHFkamhQWm05cVpUa3JNbmxMVnpFNE1sSXJjazF1YjJORVltTnFRM2hQYmpsRVNXZHVRVmRWZFZvellXWTFhRGRsUzBGMmVUVkZZakU1UVRJNVYydDBXV2xQZVhSblNVOTNPSGw1UVc5cWRreFVSR2hPWTBSTlMwVk1OMDgwVTI5dldrWmlkVmxYZHpSRWJIb3lXa1p6ZG1RM09VRlVlbVZ5WlhsNWFtbE1jMUYxVHk5dlUySXhiR014WTIxelNGUmpNRFZMUlcxRmJuVk9TSE5aYzFFeVduSjBOVXhxTUZkS1oySnNNbHBNVm5KUVIzVmFSa1ozUkRZeFZtdDBiQzlwVWtobmN6Tk5NMngyYWxOQlRIWjVjRUpzVVhWdU4zY3dWaXRpYTA0M2QySm1TVmRVY1Raa2RVTjFSRmRzT0RKU1QzSk9ia3A1UkRaQ2MwUmtRWGxpZG5JdlJ6Z3hPRkJrZDNkUmVVUkJObVZHWmtkSGNESjRXVFkyUVROcWNHMVBhR1V4V1VkeFVFVXhhalk1TVdWNlNYSXlORlZRTWsxeU5IZDRPRkZwY2tkeVJIZENkVzVtUVVkWlFsSkVOR3BIZDFCVU5tdGhka1IwZVVoVVFqWldPWHB5ZWt0VFRXSmhZeXRDVXl0RFRrUm1WVkF4Y0d0RGJtRTFaRmwyY2poT2JXSTFZWHBUZFZvMVJGWk1MMHh3UmxodldHdHdWbXg1VUdjNUwzaHJWVmhQU1cwcmFEaGpSbGRFYmt3M1pUZGtRMkpTVm1wTlNUbGljVFptTkRsWWNsbzRSREZFVTFOQksxaHVaVGRHVFRWMUwwcDZlRlV2WWxWU05GcGhVbXQyUzNCUFVsRndUU3QxY0VVeldreExNa2R6SzBOTFVWcDJPVlpIY1RodU1IbExObU5WTUZGbU9VeG9SQ3RKYUhCMlluUjFSM3BMV0dGdFpEZHBPV1p6TkdFeGREbEZhazFLWmpGbWMxVnFTa0pMYlhabVV6STJVR3hVYkRWcE9FVXdOMmszV2xaaWNUbDBjbmx1WmxsdFpXZEVaMEV4VVUxdlkyZENkV1ppV1hWMmRqTTVlbWR0V1UxaVMxbzRSRTlVWmxsRlpYSTNjR29yYm1vNGNtOW1TVGhTYWxCVVFtcEhkbmx2ZEcxVmRFbFVObmRzVVN0MFRYVnFNazk1TlhSM1RUZHZkRnBEWW5reFFXcE1WRlJtYWk5MlZFVlpRa05IWVdwS1VXb3Zka1pvYTFVclVGRmthVWhUZERSQmJYTjVNVUkzU3pWbGJIQTFNRzUyY1RaSGRFZFRja2g0WlZkNGNWUklWSEozZGpGWk0xUlNWRGRXZERsRk1FMWlhMDV0VjNWMU9HOHpha05NYWxkRVlXTXhVekp2V1c5RldEWnpNRGxNV0d0aWJUUkliMFEwZFdzd1RGaFliV2w2YVRKbFNFdGtaVVExY2xob1J5dFROVWRTYm5oWmJrbFFWVGhOU20xd1dHRTRaRE4wVm1STVVUWXpUbTlsYVRWRVpYcE5Ra3B3TTBwdVRFNURiR1ZYTmxSblYxZzNWa2R3YWpOaU5qaDFNM0ZZVG5JeFJXTnVhMEZrS3pWb1ZsUlljMWs1Ym5vNFZWQlVZMHByTjB4YVpsWm1OWGxCY2xkcmNtNU5RMVpwZGtaNEszQlljbTVwTmpsWE16bDZhMEl6ZUVOc1JYVmtPR3BOVjFaVlRYaFNOR3hFTUdST1Vpc3hUMFpXTDBodmFUVXlXRTFYY2tzelNWaFFXRVJPWkhJeGMyUlJOSEpYZFVkQ1dXbEJkbFpDWjBReVFpdHlVV3hNVTBWRFlYbEdRVW8zUVZkaVEzaEZRazl4UkZGTVYyTkJSbTFSTmpOT2JEQmFTMFJSVTBObWJGaHFXRXB6YW5sNlFrWmFhMGhqVGs4cmMycEJkRmh3UTFwQlJtMVdZMnBGWkdkTVFYUldlRUZ1YzNodU5WVlRRVk5LVVV4VFpFRkdiVkpsYTFWU1p6VjNhbk16ZDIxWmNVTnRlVWxQS3pnNFZtdG9SVkpCUlRsMU9FVlVSVkZXVjFwQ05WSlNTMEoyVTBOM1pubGtaM3BEV1V4emEwZERkakJTWjNCM2FGVjRkMjV6TVVkNFYxSm5VMGxuUlVkQlZITkJaM2RXT0drd1JrRkZjWFZOUlhsSlRHTXdSWFZSV25VNFltZGxielJCWWtsbk55OTBZVmxRTUU1U1dVTm9lRUV4ZEdWS2NFNUNRWGREWlN0elNsaEdlR05IUWpNMFUzZFRTWGRDTkZKWlJUbG5haXREZW1GcFNsRkNVVlJaUlRScFNsRlZjRkpEVDFNeFYwTkdOMk53Y0ZZclEybzFWRzQyWlhOQlRTODNla0ZyWWprd1lXbFVOWFJJV2xkeVVuWkpkVmt4YjNCS05teFhkV1ppYlVKTk4xQjZNbk5HV2t3MGVHSmFlbVZTY0hGdVNVUTVWRkJXVEVWQlVXbHFhVlV4VG5STVdteHVMMGczTUZGVmRWZG9aalI2VlZCdWIwMVlSMmhEVFRsdlZrbHdjMUl5TDBGdlVXTnNTVFJuUW1SaVpXNUJSRzVDUmt4MFkxQm5TRFp1YzFGQlRWcFlSemRFYkVVek5YSXZVeTkzZVRRNU5HdGpUM0Z5UTNGYWRuZGxSVGxsZEZZeVV5dFBjbk51WVhWM1IweHhhWGhwWWpBMVozSjZNRUp0ZUhaUk5WTkxNREF4YjNSS1RqRXpkRGgyZGtjd1ltTjJPRlpTY1RkVlExSmFiVzF1VlhKTE1sQlZWbGhVVjFwMWFXWnZRelpZVmpCck0zazVWRVZqU0cxclpETm1jR2xITVhWNFJGaHhTWEJKWTNwdFpVZFRNMUJVU2xwd04wbFplVUl4VUhrMmNFeDViblkzYW5wR09UbEhMemhXTUU5Q1dIRlRLeXN4UVUxM2QyeGtXbUZ2VkRKS1ZtaERVVzlaVXpWTGNFRkZXa2RxU1hKeVkyRTNaVE5OUTJVcmMwcDVTVmhsU0ZORlNWbzFjRmd3VEVKelUybE9OekJ2VXpST1NFMUVOVVozVVRCNFJuZEtkSGxIU1c1UVZVeFdSblZuYmpWdVFVWnBObXhMY0ZCaFRrUkhVRmw1Tm1aVlYwUk9kV3d6WTFKbVQzUkdXVzFMZEZCc2RWVjBNRWh0Um5kbU5scDBialJZUVRSQlpXOWhVWEY0ZGxoUFRtc3hiazB3VkdkTVkyUmpPWGR1UTNWVFYxQjJTSFZaUVRsRk1tMUxVRkJWVWpKQ2FXOVpWbEExUjNnNWFWTnhVREpTUlRkb1ZYWXlOMDVUVWxsMFZUTTNiVVUyWlU5MWExTTRLMmgwZDBWRGVIRjZXVkY2TW5wT2VXVjNjalUzUVM5UU1ERndaMmgzT0dwTU4yMU9SbkJRV25sYVRXVXplRXN2V0ZFd1JHWkJPR2xaTWpkTmEyOVhlVFpJU1dKc1ZXWmpaRmh0U1ZZek5reGFZVFpIUzAxWE5rOTZhV053WTAxSmJIQlJjVFZGWmxsMVdrNHlZbEpXWVZSUloydDJkbUpFUjJOaU5TOXBja1JsUm5CRGJsTlhRMnN2ZFdOR1pHTkpZMDFxVjAxb09URXlNblpyVTFaNEszazRkalJhTm5CRFpUbEJRMUJOY1drclVEVlViVkJpTDB3d1ZtMU9iSE5FVVdsaEx6WTNUbmxsZDNRMU4wRk1hSEpWU1ZOR1pGWnhXRXhyU25wak1FMXpTME4wT1cwMFFYbGhiQzlaUlZObmFERnpaMmh3Y2s1RVNIcDRLMEZyTjAxVU0wNHhUVTEyVkhoVWNFaDVhREowTVhkVFpXRm5hbmc0V0dJMlpVMXFibFp0TkZsWFpFNWxiMVJKUmpZMVRtMWlSVGxvV0ZRd1EzcEpUM051YmtKQ2VVUTBXRTlQZERVd01tZHBXRGhYZFRnclprRlRTVElyZGtsV00wOXNSR1V2VW1Jd1Rtc3daamxNYlU1SlZHMVdNa1JwV2psa1N6VlFPRTEyZEV4M2FuWjFiM1UxYVRaVk9VRlZkRTk2UzBseU9ESnlkR3g1WTBsU2NHVk1Oak00SzNoUFZXOW5SMHRKUm5vemRtSjJSREl2YUd4bFNISXZSVU5YTlhkak1tTTFiamQzYm5FeFYxWXlkbGQ0T1cxaFdXZE9NVU51ZFZCb2NHVTBSbkpRZGtWNmRYVTFiVU5IVDJJM04wRnZNRnAwVkhVeVRHeG1hazVIZHl0aVlXcHVRM1JWWm01SGRtTlhWRXhMT1UxSmQwTlJSRkI2UjJoYVoya3JhelI2WTNGaVZYazNSR055ZVZGd05XMUhSaXRXWjNONVpVeEtXbTE1VDJONU1uUjBWMHR1Wkc1TFJqaDFkM012YWpOb1kwdGtURWxaUVVGQmJVZFRWVkpDVmtSMlVERnpWMU5KVVZacE1XMWxkRzgxTW0xNWQxVjRLMlZqYzBSRFRFRXdRblJNZDFSNVJ6VkRXREZMVTFZNVZFMUVNekJoT1ZselR6WXJhV1psTVZSWWJERkxVVTg0VEUwck5tNVFWbVpsUVdSVVlrMVpiWHBoWlV4VFlYWjJUSGRzU2pZNWRUSkljM1ZYUlZkb05tbHdVVGsxVjFaSlRHeEhabGxrUlhSNWVUWnpObWR0VlRONWJYSlhhWEZtY1dNdlRFVm9kemRuWWtzMmNFRlJaamR6U0dWb1owOHhibWhQYjFSVU9YaENWVTFyUTJ4U1pYWllWMUJhU2xKV1luQlFSbEptU2pKYVFubFdXREpCYXpsVlV6TlJTRnBsZERCVFpFVXhNV1o2TXpKV1ExVkJVak16VkZadE5YSkdOMGRuU210VVdFbHphbU51YzBzNE5XZFNjVEJYV0ZaT1YwcFZhR1ZTZEUxM1JWaHZSa3hJTWtkc00xZHVWMk52Y1hKbWFXRlljMHhKU2t0bFFVSXhRbmhoT0U5eGRHTkpRbEJpYlVKQ2NVSk1iekJyUVdkbFFYZE9Oa2RCTlhkVVQwbERjbWQ1YnpKQmIwYzVUMWxIUkVoUmNrVTJLM1pNVEdsVmRXUjRWMngzTkRJNVdscDNVVmhpVFcxVFNtSjNVMnhKVTBkRVkwSjZTWEJvUlRkV2N6VXZXRXRNYmtoVGNrOXJVakpWYkdSVWFtMTZNV3RpVmt3MlJVWmpLME52U1V3NVZGQklWbTgyTlhsNVREVldjbmhSVGxKTlJTODFSbFZZVmt0bWRtVnVSVU42WldkSk5WRlVhbTFUY0VwR1RrRm5lR3MzWjBSWFpUZHlZbTVKV0d4QmVsSnNXRlV3VFhacmREUlJkSEV5Wm5kakswVkhTRW8yVW1wbE9YYzJOVVJwSzJGWk1GUnpaVGhZZEdGS01rSnNhRXhvUmtsVE5VdGhWbGREZDBwWlZrRnliR2xYV1hOQk1tTldWMjFhVUd0UFNsVXlNVzFFZG1KdFFrRTJNa281UVN0NFZ6QlZORk54ZWxwME1VRjFkbkoyV0VaaGNWQllMMmxtSzNOc1ZIazVXakZQYVVVMlRHRm1lVXB3YUc5QlRrRmxSblE0YlRGQk4wUnVPRUZGU2xvM1FUbG1ka0ZHVGxwVVVsRkNNRlpwU0ROd1puUTRZV2hHWlVGRFpVOUxMM1ZxYkRoRWQxSlNORzB2ZEU1QlNpOXRVVUp1Tnk5RFYweDZha3RWTWtsMFR6Z3hXVTAyWjFWemIxWnlNWEJzWmxCdFdsWjNjM1I0UkZab1QyRldXVkkyTlZaM2RrMTFkRXRWYVhOT2VsVnRNVkpwVW1ad2JEVmtXall2VTJzek1qbEhjeXRtVm0xWmJGaHpTRU5zU0drNWFUbDZTMWxTYUVaTFRHMTFlSEY1YUUxbGRHdDZURVoyV1dGQ2RuTmFNVE55VmtOemNHNWtPV294YmpReE4wMXBibGQ2VkVNd2VrMVVXWEJZVUVNMVYyVlZjVGRUVDJaTE1tWktWMFJKWVVKV2MyRkJORUpUY2pZeVJVUldkM3B4UTNkUWJWTnNSa3hpYUdSTVdrNVhUa2h2VTNsRlJscDBlV2x0YTJKMmFGcEdRV0pYYzIxRFpGTjVMMGhPVkV4V2VHSm9kMGh5U3poTVZuTnRjbk5CYzFaVVdteEdObVpXYTIxS05VdERaR1Y1UlRSeWMxTXZXR1YwYm5JeVlqWktiRkZRYjFKYVJ6WktNbmR1UlhRck5IUm9Ua2x1U1ZoMVVIbG9NV3hSVFhsQlNYRmxkbTlXTkhOVGVHcHVjRVpVVm5RNVl6aDVNM053WlRGelFqVXJWVGhZY1d4TFJGbzBRbVJCVTJkWlpUbHpOMlpvZDBnM2JrSkxlSGRWZVhWak1XNVRWbVZ0Wlc1VFpHWTRLMHR3Y3pFNUsxTnRVbVpEWVdsdmJ5czFjMWcyUmt0cGRrbDNhVGRyVEdkMmNVMXVRM1V6ZUdaV1NIaG9lVWhSZFZGbGFXdG9PRWxOZGtaTE5YSk5UWE4yYUZCSWNXVndUbFJtU0ZGQ2FrVmplRkpQTlZWSGIzWXdUMmwxZGl0QlEyd3hNbk54ZURKdFFtUnBZbFYyU2tNemFHbExURWRPTUhaaU0wUXpXazlaVUhaUlVFdzJSME5rUXpsQksxUk1aWHBMWm5GTllqTXhPRmR5WldSV09VRlhRbWRQVVVGV05GQmtPSHBTVnpacWFGVjJWREJSV2l0VGVrcG9hbUo2ZFhOTE9FRnVTRVZhYTB0emJsaFVkbTlZYlRsclUxQlVWelpaUjBwNGRtRkZOMEpoZW1keGJuUmpOWFZsVG1ZclQzTTRTMjkyVDJWWFJYUkZPVWRWU2k5RE9UWXdkRU5ZTVZaNmNreGxjMHhaWlRKWVpYVmFaa3BvVG14ck9Xd3JiVmt2WTFaTmFTc3JZWEpZTldSRGJqQlNjbTQ0YTB0Uk9EQkxjemRUY25sbGJHZE5TbFEzYzJOVk1UVTNaVTAxWjFOVGEyUnFSV1pKUkV0NVkzZENSM05vTjFodE1VSm5PRFoxU0RodWNHbE5TbXMyVlZCTlRUbHdlVUZIZWt0amNteE9Ua1ZRY20xQ1NFcEVaRWt4VHpKV09ERnFhbU5VWWs1aE5ESjRXblo0ZGl0d1UxUTViSFpFVmtwb2VXZEtjbnBhY1RaSk55dEpiemxRV205S1FsWnFWMHBXUmpWTlkySnFla012UnpoblV6TlVTVGhKTmtaU1pYZEtlV3BWWmtsRFJtSldOa2xrWkRkRmIwcHRPSE5IVm1GT1pGb3haREk0VkdjdmRqZHViMEo2ZHpGaE9WcFdUak5VZEZkV1dHRktabVpQVDFoMk9VVk1OVXN3TjJzeWFrdGxZakpXWW5kaGVsRkpaV0ZLVHpOT1EyVjNVSFozVG5wQlowdFZVRXh1UzNaMWRtSklOME0zY1RGdWFITmpOV0pyTkV4MWFIQklOVFpPWTFSMU5FNW9WWHBXZUZSelFXVkxNVm94WmpsVlVUTmhjbUZ6VTIwNVZFNXFkbkZuZFRKSFJYSnpZbEZHUjBWWWNHZzBWV3RwTUVKM1JUbDBXVlJoUVRkRmRFcFJTVlpDYzBKUGIwWnhkSGNyTVVsM1NtSlNOa0ZoVkd0RGFUVkRVakJ5VjNrd2VYUmFhRmxSVmtWdlJHdEpWazFOU25sRlUxQlZSMHRPZFdoMFkxVjBZV05TY1ZOc1VrOUJlRU5HVkVSRFdXZEdXblpITkRSeWVEZHFSV3R6VTNkVFNYZERiMGxXVFdOS2NrdEpNVGg0U1VKSmNrRjRRa055YTBKRWNEWTRZbTkzV1VoSmFrRnJVbWRhZDJoVmVVRnRNR2RXZGpWMFJsbFlZVXN4UVZsTVJYcHhSbWRTUldGbmJrRm9WbmxCZGtWSU4ycENLMEpOVGsxUVVuVktWbWhIUW1KVFNsRkpVMk4zUVRaaWVYZFVlalZoYURRelNXdEJSV1J2VmtGb1ducEJjbXQ0YlZCVlUwRkRUbWRKTUVGdVdXRklRMlpEUkZGUloyVnZOR2RtYlVSb2RDODVXbTVWUkVjMFZXMUZORVprU1haQkwzVTJkM04wZVRWR2NtZElUbTF5Um5GbFIybDFWVU5aVVVGVFNsRkNaMGRIUlhCa1FtbFliVWxSU1RCU2NVMDFkMjlOV1djd2VsRnBWVWRWUlRaQlUzRXpSSEpWYWxGcWMwRkJSVFpuVWpKQmVrTnhTVkZLVlZKUFNFRnVSVVpPTmxZclJUZENVRkJtT0ZoUWNrRm9abkUzTW1ZNFVIRTVlWE14VFROSmNrSkJORTFEWkhkTlMxRXZaVFU1ZDIwclpFUXZhSEZtU1RkNk5rSjZibk15TDNkdU9EVjJLekZYU25SU1QwSnJaMmhWZDBGdWIzQXZibEpqU1RjMU9FRnBkRlpuZFhSV2JqbENWbnBWWmpScmFXUnJMMDEwVTBRM1drcHVNRFUzYlVGblV6UXhTRE5pYW1ORlZsSjVXRTFpYTNoaFUzWXdibGRJYjJGREszVkdlUzl5TDAxeVdHTnlNRTFwWVdZNFJXWjNRWFlyVFZneU9TdG1kamhtTDBsckx6QnJNbmRvUkZseWJscHNTRkpIUWpORFJsUkJRMk5VUnpOeUwwWlhMM2xEWVVKWmFYZEJhVmcyYlRabGIwNDRXa0ZQUmswclMxVm9PVVZFVkZGVlpEbG9WWGxKVVhGT2IzQnZaM1V3VW5aeU9VOW5NbFJaVWxwb1MwOHpVR3d4WjA1QlRHdERMMVY2V1dSRlkxaFhja2hWYVVSeU9EaE9abmRRVFhZNFFWZEJWQzh3VEhaTWRpdENhVGsyUWxGWFdWSkJVWEZvUlVFeFJtZHpRbTFKTmtGek5tZE9ORUpUTXpCaGJVZGhVRXBYT0dWR2FEQkZSbkp6UlVSMFZISTBLMlJEZURVeE9TczRPV05ZYWl0RFFqaEVabFpSWmk5S1kzTlhhWEZVZUhsVmNVVTBZM2RFVms5alNEYzNSa292TmtnNVRFdERaVTUwWWtaWk5tZFZaRVZaVERoSlZrdGpiakJJZFd4aWVuZFFTSEl5ZUZCUVZWaG1OMk53TTIxMFVHZFVTMjVEZFc5eVZUbDZUemc0VjFSeU5FUlNUbVkzTDNONE9YaG1kbFZWZDBka09IWnlUbnB4VUVkTUwzQm9jWGQ0YUhaSVVsSTBWMFZGUlhGMVRVVm1UMEl3Ym1sSFVWb3ZTRTVGYTB4eWRYZG1hMVE0WWxCTlluZFZablF3ZEdKelpGQTRVeklyZUdwamRscFZRV2RPTDNoSVprcG9LMjAyTm5keFdYa3pZVkpTTkZaRlJVVnhkVEJGTW5GbE5HeFViVU5hVDBwUVNtZFFhbmxVT0VaYWFIVnVXbm94WjA5clFraFVVamRIWVdVeFZEWk9UV1JPV0d3MFpubE1la1JPZG1OdWRVbzNPVlZaWjJacldGa3ZVWE4yV25RcmJrdDZkemxUZUM5NmFVRm9WVUpCU0VkRWRYbHpTVk5hUVhFMmMyMVBZM1pRV0hVMVRVOVdZbFZaUVZOeE0xSlBiMU00VFc5amFGVTJaMHh2TUZvNU0zTlpSU3RuWW1reFMyVTBha0ZwWjJsM1NqZEJhVmxOZUU5Q1QzRkhRVW94UVROV2NWVTVhRU5DUmxKSFowVXhaMUpOUjFsdVFXNVdSSGRQT0VWNVFrcGpkRE5oYlZCVlVXZEdkMGN2UlhsQ1RHTkROV2RVUTBGRFpGVlFRVGQzVkVWVGNrbEZNVFl5ZEdGUk9GSTRRMHRSTjNkVE9ESlliVk5EUWtOQ2RXbEdVVFJCVkVsRmJIa3plSEZaT1ZKTlEwaFJTVVZVU1VWMWQwUjZRMlZKZDBveFVUWkVRVU5hUVd4MVJ6Wk9WRmgxU1dkQkswSkJhV1JCYkcxQlpsbEVlRWhDVDNGSFVVbEZWSEZLZFhCMFNXTkpSVUZGWmtGdVVVTlFiRkkwYW1kbk1FTkpSamhLTUVOWE5FRmFaRUpxVXpGNVVXbzBVSHBTUzJ4MVFXMVllRTh3ZGxkRlNUaEljME5FVjNSM2JXdHpSVmhCVkhsb2QwNTFWR2cwVkVGVFNsRlRkMVJ2UWtkeVduSkVVMHREU2xKSVowVTJaMUJHWWsxVFVWSnhhVkZEWkZGRE1tSnNWVmxTWjJaSlNTOUNMMEpXUW5SWlpXOHZkVlYzUVVGQlFVSktVbFUxUlhKclNtZG5aejA5.jpg?w=700&webp=1)
然而并没有什么卵用,你只会收到一连串的WA
该题的意图应该是贪心,至于怎么贪……わかない……
好吧,我太菜了,只能用最暴力的方法,设x^y=p
对于y>n的解来说,x必然小于k
对于y<n的解来说,x必然大于k
对于x来说单调性
所以可以二分
至于y该怎么求……想必一个高精度的log就行了!而且只需要保留个位即可
感觉我的代码还是有问题的,但莫名1A了
代码如下
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct big
{
int len;
int num[200];
};
int n;
void trans(char* a,big &b)
{
memset(b.num,0,sizeof(b.num));
int len=strlen(a);
for(int i=0; i<len; i++)
{
b.num[len-i-1]=a[i]-'0';
}
b.len=len;
}
void trans_(int a,big &b)
{
memset(b.num,0,sizeof(b.num));
int len=0;
while(a)
{
b.num[len++]=a%10;
a/=10;
}
b.len=len;
}
void print(big a)
{
for(int i=a.len-1; i>=0; i--)
{
printf("%d",a.num[i]);
}
puts("");
}
int comp(big x,big y)
{
if(x.len>y.len)
{
return 1;
}
if(x.len<y.len)
{
return -1;
}
for(int i=x.len-1; i>=0; i--)
{
if(x.num[i]>y.num[i])
{
return 1;
}
if(x.num[i]<y.num[i])
{
return -1;
}
}
return 0;
}
big sub(big a,big b)
{
big c;
int len=a.len;
int lenc=len;
for(int i=0; i<len; i++)
{
c.num[i]=a.num[i]-b.num[i];
if(c.num[i]<0)
{
c.num[i]+=10;
a.num[i+1]--;
}
}
while(c.num[lenc-1]==0&&lenc>1)
{
lenc--;
}
c.len=lenc;
return c;
}
void mul_ten(big &x)
{
int len=x.len;
len++;
for(int i=len-1; i>=0; i--)
{
x.num[i+1]=x.num[i];
}
x.num[0]=0;
while(x.num[len-1]==0&&len>1)
{
len--;
}
x.len=len;
}
big div(big x,big y)
{
big f,m;
memset(f.num,0,sizeof(f.num));
memset(m.num,0,sizeof(m.num));
m.len=1;
int len=x.len;
for(int i=x.len-1; i>=0; i--)
{
mul_ten(m);
m.num[0]=x.num[i];
while(comp(m,y)!=-1)
{
m=sub(m,y);
f.num[i]++;
}
}
while(f.num[len-1]==0&&len>1)
{
len--;
}
f.len=len;
return f;
}
int check(big x,big y)
{
big z;
int cnt=0;
z.len=1;
z.num[0]=1;
while(!comp(x,z)==0)
{
if(comp(x,y)==-1)
{
break;
}
cnt++;
x=div(x,y);
}
if(cnt<n)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
char b[202];
int a;
big x,y;
while(scanf("%d %s",&n,b)==2)
{
memset(x.num,0,sizeof(x.num));
memset(y.num,0,sizeof(y.num));
int l=2,r=1000000000;
int mid;
trans(b,y);
while(l<r)
{
mid=(l+r)>>1;
trans_(mid,x);
int flag=check(y,x);
if(flag)
{
l=mid;
}
else
{
r=mid-1;
}
if(r-l<=1)
{
trans_(r,x);
if(check(y,x))
{
printf("%d\n",r);
break;
}
else
{
printf("%d\n",l);
break;
}
}
}
}
}