Integer roots: Difference between revisions
Content added Content deleted
(→{{header|Phix}}: now uses mpz_root() instead) |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 95: | Line 95: | ||
2nd root of 2000000000000000000 = 1414213562</pre> |
2nd root of 2000000000000000000 = 1414213562</pre> |
||
=={{header|C |
=={{header|C sharp|C#}}== |
||
<lang cpp>#include <iostream> |
|||
#include <math.h> |
|||
unsigned long long root(unsigned long long base, unsigned int n) { |
|||
if (base < 2) return base; |
|||
if (n == 0) return 1; |
|||
unsigned int n1 = n - 1; |
|||
unsigned long long n2 = n; |
|||
unsigned long long n3 = n1; |
|||
unsigned long long c = 1; |
|||
auto d = (n3 + base) / n2; |
|||
auto e = (n3 * d + base / pow(d, n1)) / n2; |
|||
while (c != d && c != e) { |
|||
c = d; |
|||
d = e; |
|||
e = (n3*e + base / pow(e, n1)) / n2; |
|||
} |
|||
if (d < e) return d; |
|||
return e; |
|||
} |
|||
int main() { |
|||
using namespace std; |
|||
cout << "3rd root of 8 = " << root(8, 3) << endl; |
|||
cout << "3rd root of 9 = " << root(9, 3) << endl; |
|||
unsigned long long b = 2e18; |
|||
cout << "2nd root of " << b << " = " << root(b, 2) << endl; |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>3rd root of 8 = 2 |
|||
3rd root of 9 = 2 |
|||
2nd root of 2000000000000000000 = 1414213562</pre> |
|||
=={{header|C#|C sharp}}== |
|||
{{trans|Java}} |
{{trans|Java}} |
||
<lang csharp>using System; |
<lang csharp>using System; |
||
Line 178: | Line 137: | ||
3rd integer root of 9 = 2 |
3rd integer root of 9 = 2 |
||
First 2001 digits of the sqaure root of 2: 141421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723528850926486124949771542183342042856860601468247207714358548741556570696776537202264854470158588016207584749226572260020855844665214583988939443709265918003113882464681570826301005948587040031864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237289971803268024744206292691248590521810044598421505911202494413417285314781058036033710773091828693147101711116839165817268894197587165821521282295184884720896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171274026539694702403005174953188629256313851881634780015693691768818523786840522878376293892143006558695686859645951555016447245098368960368873231143894155766510408839142923381132060524336294853170499157717562285497414389991880217624309652065642118273167262575395947172559346372386322614827426222086711558395999265211762526989175409881593486400834570851814722318142040704265090565323333984364578657967965192672923998753666172159825788602633636178274959942194037777536814262177387991945513972312740668983299898953867288228563786977496625199665835257761989393228453447356947949629521688914854925389047558288345260965240965428893945386466257449275563819644103169798330618520193793849400571563337205480685405758679996701213722394758214263065851322174088323829472876173936474678374319600015921888073478576172522118674904249773669292073110963697216089337086611567345853348332952546758516447107578486024636008</pre> |
First 2001 digits of the sqaure root of 2: 141421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723528850926486124949771542183342042856860601468247207714358548741556570696776537202264854470158588016207584749226572260020855844665214583988939443709265918003113882464681570826301005948587040031864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237289971803268024744206292691248590521810044598421505911202494413417285314781058036033710773091828693147101711116839165817268894197587165821521282295184884720896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171274026539694702403005174953188629256313851881634780015693691768818523786840522878376293892143006558695686859645951555016447245098368960368873231143894155766510408839142923381132060524336294853170499157717562285497414389991880217624309652065642118273167262575395947172559346372386322614827426222086711558395999265211762526989175409881593486400834570851814722318142040704265090565323333984364578657967965192672923998753666172159825788602633636178274959942194037777536814262177387991945513972312740668983299898953867288228563786977496625199665835257761989393228453447356947949629521688914854925389047558288345260965240965428893945386466257449275563819644103169798330618520193793849400571563337205480685405758679996701213722394758214263065851322174088323829472876173936474678374319600015921888073478576172522118674904249773669292073110963697216089337086611567345853348332952546758516447107578486024636008</pre> |
||
=={{header|C++}}== |
|||
<lang cpp>#include <iostream> |
|||
#include <math.h> |
|||
unsigned long long root(unsigned long long base, unsigned int n) { |
|||
if (base < 2) return base; |
|||
if (n == 0) return 1; |
|||
unsigned int n1 = n - 1; |
|||
unsigned long long n2 = n; |
|||
unsigned long long n3 = n1; |
|||
unsigned long long c = 1; |
|||
auto d = (n3 + base) / n2; |
|||
auto e = (n3 * d + base / pow(d, n1)) / n2; |
|||
while (c != d && c != e) { |
|||
c = d; |
|||
d = e; |
|||
e = (n3*e + base / pow(e, n1)) / n2; |
|||
} |
|||
if (d < e) return d; |
|||
return e; |
|||
} |
|||
int main() { |
|||
using namespace std; |
|||
cout << "3rd root of 8 = " << root(8, 3) << endl; |
|||
cout << "3rd root of 9 = " << root(9, 3) << endl; |
|||
unsigned long long b = 2e18; |
|||
cout << "2nd root of " << b << " = " << root(b, 2) << endl; |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>3rd root of 8 = 2 |
|||
3rd root of 9 = 2 |
|||
2nd root of 2000000000000000000 = 1414213562</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |
||
Line 694: | Line 694: | ||
Both generate the same output as above. |
Both generate the same output as above. |
||
=={{header|Perl 6}}== |
|||
{{trans|Python}} |
|||
<lang perl6>sub integer_root ( Int $p where * >= 2, Int $n --> Int ) { |
|||
my Int $d = $p - 1; |
|||
my $guess = 10**($n.chars div $p); |
|||
my $iterator = { ( $d * $^x + $n div ($^x ** $d) ) div $p }; |
|||
my $endpoint = { $^x ** $p <= $n |
|||
and ($^x + 1) ** $p > $n }; |
|||
min (+$guess, $iterator ... $endpoint)[*-1, *-2]; |
|||
} |
|||
say integer_root( 2, 2 * 100 ** 2000 );</lang> |
|||
{{out}} |
|||
<pre>141421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723528850926486124949771542183342042856860601468247207714358548741556570696776537202264854470158588016207584749226572260020855844665214583988939443709265918003113882464681570826301005948587040031864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237289971803268024744206292691248590521810044598421505911202494413417285314781058036033710773091828693147101711116839165817268894197587165821521282295184884720896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171274026539694702403005174953188629256313851881634780015693691768818523786840522878376293892143006558695686859645951555016447245098368960368873231143894155766510408839142923381132060524336294853170499157717562285497414389991880217624309652065642118273167262575395947172559346372386322614827426222086711558395999265211762526989175409881593486400834570851814722318142040704265090565323333984364578657967965192672923998753666172159825788602633636178274959942194037777536814262177387991945513972312740668983299898953867288228563786977496625199665835257761989393228453447356947949629521688914854925389047558288345260965240965428893945386466257449275563819644103169798330618520193793849400571563337205480685405758679996701213722394758214263065851322174088323829472876173936474678374319600015921888073478576172522118674904249773669292073110963697216089337086611567345853348332952546758516447107578486024636008 |
|||
</pre> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
Line 760: | Line 744: | ||
See [[#Scheme]], there’s very little can be done to improve it. |
See [[#Scheme]], there’s very little can be done to improve it. |
||
=={{header|Raku}}== |
|||
(formerly Perl 6) |
|||
{{trans|Python}} |
|||
<lang perl6>sub integer_root ( Int $p where * >= 2, Int $n --> Int ) { |
|||
my Int $d = $p - 1; |
|||
my $guess = 10**($n.chars div $p); |
|||
my $iterator = { ( $d * $^x + $n div ($^x ** $d) ) div $p }; |
|||
my $endpoint = { $^x ** $p <= $n |
|||
and ($^x + 1) ** $p > $n }; |
|||
min (+$guess, $iterator ... $endpoint)[*-1, *-2]; |
|||
} |
|||
say integer_root( 2, 2 * 100 ** 2000 );</lang> |
|||
{{out}} |
|||
<pre>141421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723528850926486124949771542183342042856860601468247207714358548741556570696776537202264854470158588016207584749226572260020855844665214583988939443709265918003113882464681570826301005948587040031864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237289971803268024744206292691248590521810044598421505911202494413417285314781058036033710773091828693147101711116839165817268894197587165821521282295184884720896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171274026539694702403005174953188629256313851881634780015693691768818523786840522878376293892143006558695686859645951555016447245098368960368873231143894155766510408839142923381132060524336294853170499157717562285497414389991880217624309652065642118273167262575395947172559346372386322614827426222086711558395999265211762526989175409881593486400834570851814722318142040704265090565323333984364578657967965192672923998753666172159825788602633636178274959942194037777536814262177387991945513972312740668983299898953867288228563786977496625199665835257761989393228453447356947949629521688914854925389047558288345260965240965428893945386466257449275563819644103169798330618520193793849400571563337205480685405758679996701213722394758214263065851322174088323829472876173936474678374319600015921888073478576172522118674904249773669292073110963697216089337086611567345853348332952546758516447107578486024636008 |
|||
</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |