Find square difference: Difference between revisions

From Rosetta Code
Content added Content deleted
m (→‎{{header|ALGOL 68}}: Corrected comments and typos)
m (syntax highlighting fixup automation)
Line 7: Line 7:


=={{header|11l}}==
=={{header|11l}}==
<lang 11l>L(n) 1..
<syntaxhighlight lang="11l">L(n) 1..
I n^2 - (n - 1)^2 > 1000
I n^2 - (n - 1)^2 > 1000
print(n)
print(n)
L.break</lang>
L.break</syntaxhighlight>


{{out}}
{{out}}
Line 18: Line 18:


=={{header|Ada}}==
=={{header|Ada}}==
<lang Ada>with Ada.Text_IO; use Ada.Text_IO;
<syntaxhighlight lang="ada">with Ada.Text_IO; use Ada.Text_IO;


procedure Find_Square_Difference is
procedure Find_Square_Difference is
Line 34: Line 34:
end if;
end if;
end loop;
end loop;
end Find_Square_Difference;</lang>
end Find_Square_Difference;</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 42: Line 42:
=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==
Also shows the least positive integer where the difference between n^2 and (n-1)^2 is greater than 32 000 and 2 000 000 000.
Also shows the least positive integer where the difference between n^2 and (n-1)^2 is greater than 32 000 and 2 000 000 000.
<lang algol68>BEGIN # find the lowest positive n where the difference between n^2 and (n-1)^2 is > 1000 #
<syntaxhighlight lang="algol68">BEGIN # find the lowest positive n where the difference between n^2 and (n-1)^2 is > 1000 #
[]INT test = ( 1 000, 32 000, 2 000 000 000 );
[]INT test = ( 1 000, 32 000, 2 000 000 000 );
FOR i FROM LWB test TO UPB test DO
FOR i FROM LWB test TO UPB test DO
Line 54: Line 54:
)
)
OD
OD
END</lang>
END</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 63: Line 63:


=={{header|ALGOL W}}==
=={{header|ALGOL W}}==
<lang pascal>begin % find the lowest positive n where the difference between n^2 and (n-1)^2 is > 1000 %
<syntaxhighlight lang="pascal">begin % find the lowest positive n where the difference between n^2 and (n-1)^2 is > 1000 %
integer requiredDifference;
integer requiredDifference;
requiredDifference := 1000;
requiredDifference := 1000;
Line 70: Line 70:
, " is: ", ( ( requiredDifference + 1 ) div 2 ) + 1
, " is: ", ( ( requiredDifference + 1 ) div 2 ) + 1
)
)
end.</lang>
end.</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 78: Line 78:
=={{header|Arturo}}==
=={{header|Arturo}}==


<lang rebol>i: new 1
<syntaxhighlight lang="rebol">i: new 1
while ø [
while ø [
if 1000 < (i^2)-(dec i)^2
if 1000 < (i^2)-(dec i)^2
Line 84: Line 84:
inc 'i
inc 'i
]
]
print i</lang>
print i</syntaxhighlight>


{{out}}
{{out}}
Line 91: Line 91:


=={{header|Asymptote}}==
=={{header|Asymptote}}==
<lang Asymptote>int fpow(int n) {
<syntaxhighlight lang="asymptote">int fpow(int n) {
int i = 0;
int i = 0;
while (i^2 - (i-1)^2 < n) ++i;
while (i^2 - (i-1)^2 < n) ++i;
Line 97: Line 97:
}
}


write(fpow(1000));</lang>
write(fpow(1000));</syntaxhighlight>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
<lang AutoHotkey>while ((n:=A_Index)**2 - (n-1)**2 < 1000)
<syntaxhighlight lang="autohotkey">while ((n:=A_Index)**2 - (n-1)**2 < 1000)
continue
continue
MsgBox % result := n</lang>
MsgBox % result := n</syntaxhighlight>
{{out}}
{{out}}
<pre>501</pre>
<pre>501</pre>


=={{header|AWK}}==
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f FIND_SQUARE_DIFFERENCE.AWK
# syntax: GAWK -f FIND_SQUARE_DIFFERENCE.AWK
BEGIN {
BEGIN {
Line 117: Line 117:
exit(0)
exit(0)
}
}
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 126: Line 126:
=={{header|BASIC}}==
=={{header|BASIC}}==
==={{header|BASIC256}}===
==={{header|BASIC256}}===
<lang freebasic>function fpow(n)
<syntaxhighlight lang="freebasic">function fpow(n)
i = 0
i = 0
while i^2 - (i-1)^2 < n
while i^2 - (i-1)^2 < n
Line 135: Line 135:


print fpow(1001)
print fpow(1001)
end</lang>
end</syntaxhighlight>


==={{header|PureBasic}}===
==={{header|PureBasic}}===
<lang PureBasic>Procedure fpow(n.i)
<syntaxhighlight lang="purebasic">Procedure fpow(n.i)
Define i.i
Define i.i
While Pow(i, 2) - Pow((i-1), 2) < n
While Pow(i, 2) - Pow((i-1), 2) < n
Line 149: Line 149:
Print(Str(fpow(1001)))
Print(Str(fpow(1001)))
Input()
Input()
CloseConsole()</lang>
CloseConsole()</syntaxhighlight>


==={{header|QBasic}}===
==={{header|QBasic}}===
<lang qbasic>FUNCTION fpow (n)
<syntaxhighlight lang="qbasic">FUNCTION fpow (n)
WHILE (i * i) - ((i - 1) * (i - 1)) < n
WHILE (i * i) - ((i - 1) * (i - 1)) < n
i = i + 1
i = i + 1
Line 159: Line 159:
END FUNCTION
END FUNCTION


PRINT fpow(1001)</lang>
PRINT fpow(1001)</syntaxhighlight>


==={{header|Run BASIC}}===
==={{header|Run BASIC}}===
<lang lb>function fpow(n)
<syntaxhighlight lang="lb">function fpow(n)
while i^2-(i-1)^2 < n
while i^2-(i-1)^2 < n
i = i+1
i = i+1
Line 169: Line 169:
end function
end function
print fpow(1001)</lang>
print fpow(1001)</syntaxhighlight>


==={{header|True BASIC}}===
==={{header|True BASIC}}===
<lang qbasic>FUNCTION fpow (n)
<syntaxhighlight lang="qbasic">FUNCTION fpow (n)
DO WHILE i ^ 2 - (i - 1) ^ 2 < n
DO WHILE i ^ 2 - (i - 1) ^ 2 < n
LET i = i + 1
LET i = i + 1
Line 180: Line 180:


PRINT fpow(1001)
PRINT fpow(1001)
END</lang>
END</syntaxhighlight>


==={{Header|Tiny BASIC}}===
==={{Header|Tiny BASIC}}===
<lang qbasic> LET N = 1001
<syntaxhighlight lang="qbasic"> LET N = 1001


LET I = 0
LET I = 0
Line 191: Line 191:
GOTO 10
GOTO 10
20 PRINT I
20 PRINT I
END</lang>
END</syntaxhighlight>


==={{header|Yabasic}}===
==={{header|Yabasic}}===
<lang freebasic>sub fpow(n)
<syntaxhighlight lang="freebasic">sub fpow(n)
while i^2 - (i-1)^2 < n
while i^2 - (i-1)^2 < n
i = i + 1
i = i + 1
Line 202: Line 202:


print fpow(1001)
print fpow(1001)
end</lang>
end</syntaxhighlight>




=={{header|C}}==
=={{header|C}}==
<lang c>#include<stdio.h>
<syntaxhighlight lang="c">#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>


Line 218: Line 218:
printf( "%d\n", f(1000) );
printf( "%d\n", f(1000) );
return 0;
return 0;
}</lang>
}</syntaxhighlight>
{{out}}
{{out}}
<pre>501</pre>
<pre>501</pre>
Line 224: Line 224:
=={{header|C++}}==
=={{header|C++}}==
The C solution is also idomatic in C++. An alterate approach is to use Ranges from C++20.
The C solution is also idomatic in C++. An alterate approach is to use Ranges from C++20.
<lang cpp>#include <iostream>
<syntaxhighlight lang="cpp">#include <iostream>
#include <ranges>
#include <ranges>


Line 236: Line 236:
std::cout << answer.front() << '\n';
std::cout << answer.front() << '\n';
}
}
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 243: Line 243:


=={{header|Dart}}==
=={{header|Dart}}==
<lang dart>import 'dart:math';
<syntaxhighlight lang="dart">import 'dart:math';


int leastSquare(int gap) {
int leastSquare(int gap) {
Line 255: Line 255:
void main() {
void main() {
print(leastSquare(1000));
print(leastSquare(1000));
}</lang>
}</syntaxhighlight>
{{out}}
{{out}}
<pre>501</pre>
<pre>501</pre>


=={{header|F_Sharp|F#}}==
=={{header|F_Sharp|F#}}==
<lang fsharp>
<syntaxhighlight lang="fsharp">
let n=1000 in printfn $"%d{((n+1)/2)+1}"
let n=1000 in printfn $"%d{((n+1)/2)+1}"
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 270: Line 270:
The difference between squares is the odd numbers, so ls(n)=&#8968;n/2+1&#8969;.
The difference between squares is the odd numbers, so ls(n)=&#8968;n/2+1&#8969;.
{{works with|Factor|0.99 2021-06-02}}
{{works with|Factor|0.99 2021-06-02}}
<lang factor>USING: math math.functions prettyprint ;
<syntaxhighlight lang="factor">USING: math math.functions prettyprint ;


: least-sq ( m -- n ) 2 / 1 + ceiling ;
: least-sq ( m -- n ) 2 / 1 + ceiling ;


1000 least-sq .</lang>
1000 least-sq .</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 281: Line 281:


=={{header|Fermat}}==
=={{header|Fermat}}==
<lang>Func F(n) =
<syntaxhighlight lang="text">Func F(n) =
i:=0;
i:=0;
while i^2-(i-1)^2<n do i:=i+1 od; i.;
while i^2-(i-1)^2<n do i:=i+1 od; i.;


!!F(1000);</lang>
!!F(1000);</syntaxhighlight>
{{out}}<pre>501</pre>
{{out}}<pre>501</pre>


=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
<lang freebasic>function fpow(n as uinteger) as uinteger
<syntaxhighlight lang="freebasic">function fpow(n as uinteger) as uinteger
dim as uinteger i
dim as uinteger i
while i^2-(i-1)^2 < n
while i^2-(i-1)^2 < n
Line 297: Line 297:
end function
end function


print fpow(1001)</lang>
print fpow(1001)</syntaxhighlight>
{{out}}<pre>501</pre>
{{out}}<pre>501</pre>


=={{header|Go}}==
=={{header|Go}}==
<lang go>package main
<syntaxhighlight lang="go">package main


import (
import (
Line 314: Line 314:
func main() {
func main() {
fmt.Println(squareDiff(1000))
fmt.Println(squareDiff(1000))
}</lang>
}</syntaxhighlight>


{{out}}
{{out}}
Line 323: Line 323:
=={{header|Haskell}}==
=={{header|Haskell}}==
The sequence of differences between successive squares is the sequence of odd numbers.
The sequence of differences between successive squares is the sequence of odd numbers.
<lang haskell>import Data.List (findIndex)
<syntaxhighlight lang="haskell">import Data.List (findIndex)


f = succ . flip div 2
f = succ . flip div 2
Line 333: Line 333:
Just i = succ <$> findIndex (> n) [1, 3 ..]
Just i = succ <$> findIndex (> n) [1, 3 ..]


main = mapM_ print $ [f, g] <*> [1000]</lang>
main = mapM_ print $ [f, g] <*> [1000]</syntaxhighlight>
{{Out}}
{{Out}}
<pre>501
<pre>501
Line 345: Line 345:


At the risk of hastening RC's demise, one could offer a jq solution like so:
At the risk of hastening RC's demise, one could offer a jq solution like so:
<lang jq>first( range(1; infinite) | select( 2 * . - 1 > 1000 ) )</lang>
<syntaxhighlight lang="jq">first( range(1; infinite) | select( 2 * . - 1 > 1000 ) )</syntaxhighlight>
Or, for anyone envious of Bitcoin's contribution to global warming:
Or, for anyone envious of Bitcoin's contribution to global warming:
<syntaxhighlight lang="jq">
<lang jq>
first( range(1; infinite) | select( .*. - ((.-1) | .*.) > 1000 ) )
first( range(1; infinite) | select( .*. - ((.-1) | .*.) > 1000 ) )
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 356: Line 356:


=={{header|Julia}}==
=={{header|Julia}}==
<lang julia>julia> findfirst(n -> n*n - (n-1)*(n-1) > 1000, 1:1_000_000)
<syntaxhighlight lang="julia">julia> findfirst(n -> n*n - (n-1)*(n-1) > 1000, 1:1_000_000)
501
501
</syntaxhighlight>
</lang>


=={{header|Pari/GP}}==
=={{header|Pari/GP}}==
<lang parigp>F(n)=i=0;while(i^2-(i-1)^2<n,i=i+1);return(i);
<syntaxhighlight lang="parigp">F(n)=i=0;while(i^2-(i-1)^2<n,i=i+1);return(i);
print(F(1000))</lang>
print(F(1000))</syntaxhighlight>
{{out}}<pre>501</pre>
{{out}}<pre>501</pre>


Line 386: Line 386:


=={{header|Perl}}==
=={{header|Perl}}==
<lang perl>#!/usr/bin/perl
<syntaxhighlight lang="perl">#!/usr/bin/perl


use strict; # https://rosettacode.org/wiki/Least_square
use strict; # https://rosettacode.org/wiki/Least_square
Line 393: Line 393:
my $n = 1;
my $n = 1;
$n++ until $n ** 2 - ($n-1) ** 2 > 1000;
$n++ until $n ** 2 - ($n-1) ** 2 > 1000;
print "$n\n";</lang>
print "$n\n";</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 401: Line 401:
=={{header|Phix}}==
=={{header|Phix}}==
<small>''Essentially Wren equivalent, but explained in excruciating detail especially for enyone that evidently needs elp, said Eeyore.''</small>
<small>''Essentially Wren equivalent, but explained in excruciating detail especially for enyone that evidently needs elp, said Eeyore.''</small>
<!--<lang Phix>(phixonline)-->
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"""
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"""
Line 412: Line 412:
n = %d
n = %d
"""</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ceil</span><span style="color: #0000FF;">(</span><span style="color: #000000;">500.5</span><span style="color: #0000FF;">))</span>
"""</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ceil</span><span style="color: #0000FF;">(</span><span style="color: #000000;">500.5</span><span style="color: #0000FF;">))</span>
<!--</lang>-->
<!--</syntaxhighlight>-->
{{out}}
{{out}}
<pre>
<pre>
Line 424: Line 424:
</pre>
</pre>
Or if you prefer, same output:
Or if you prefer, same output:
<!--<lang Phix>(phixonline)-->
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- equation</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- equation</span>
Line 441: Line 441:
<span style="color: #000000;">p</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">substitute_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"2*"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"1001"</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"500.5"</span><span style="color: #0000FF;">}))</span> <span style="color: #000080;font-style:italic;">-- divide by 2</span>
<span style="color: #000000;">p</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">substitute_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"2*"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"1001"</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"500.5"</span><span style="color: #0000FF;">}))</span> <span style="color: #000080;font-style:italic;">-- divide by 2</span>
<span style="color: #000000;">p</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&gt; 500.5"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"= %d"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ceil</span><span style="color: #0000FF;">(</span><span style="color: #000000;">500.5</span><span style="color: #0000FF;">))))</span> <span style="color: #000080;font-style:italic;">-- solve</span>
<span style="color: #000000;">p</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&gt; 500.5"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"= %d"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ceil</span><span style="color: #0000FF;">(</span><span style="color: #000000;">500.5</span><span style="color: #0000FF;">))))</span> <span style="color: #000080;font-style:italic;">-- solve</span>
<!--</lang>-->
<!--</syntaxhighlight>-->
or even:
or even:
<!--<lang Phix>-->
<!--<syntaxhighlight lang="phix">-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (user defined types are not implicitly called)</span>
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (user defined types are not implicitly called)</span>
<span style="color: #008080;">type</span> <span style="color: #000000;">pstring</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">return</span> <span style="color: #004600;">true</span> <span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
<span style="color: #008080;">type</span> <span style="color: #000000;">pstring</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">return</span> <span style="color: #004600;">true</span> <span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
Line 457: Line 457:
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"2*"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"1001"</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"500.5"</span><span style="color: #0000FF;">})</span> <span style="color: #000080;font-style:italic;">-- divide by 2</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"2*"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"1001"</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"500.5"</span><span style="color: #0000FF;">})</span> <span style="color: #000080;font-style:italic;">-- divide by 2</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&gt; 500.5"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"= %d"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ceil</span><span style="color: #0000FF;">(</span><span style="color: #000000;">500.5</span><span style="color: #0000FF;">)))</span> <span style="color: #000080;font-style:italic;">-- solve</span>
<span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&gt; 500.5"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"= %d"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ceil</span><span style="color: #0000FF;">(</span><span style="color: #000000;">500.5</span><span style="color: #0000FF;">)))</span> <span style="color: #000080;font-style:italic;">-- solve</span>
<!--</lang>-->
<!--</syntaxhighlight>-->


=={{header|PL/M}}==
=={{header|PL/M}}==
This can be compiled with the original 8080 PL/M compiler and run under CP/M or an emulator.
This can be compiled with the original 8080 PL/M compiler and run under CP/M or an emulator.
<br>Note that the original 8080 PL/M compiler only supports 8 and 16 bit unisgned numbers.
<br>Note that the original 8080 PL/M compiler only supports 8 and 16 bit unisgned numbers.
<lang pli>100H: /* FIND THE LEAST +VE N WHERE N SQUARED - (N-1) SQUARED > 1000 */
<syntaxhighlight lang="pli">100H: /* FIND THE LEAST +VE N WHERE N SQUARED - (N-1) SQUARED > 1000 */


BDOS: PROCEDURE( FN, ARG ); /* CP/M BDOS SYSTEM CALL */
BDOS: PROCEDURE( FN, ARG ); /* CP/M BDOS SYSTEM CALL */
Line 497: Line 497:
CALL PRINT$LEAST( 65000 );
CALL PRINT$LEAST( 65000 );


EOF</lang>
EOF</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 506: Line 506:


=={{header|Python}}==
=={{header|Python}}==
<lang python>
<syntaxhighlight lang="python">
import math
import math
print("working...")
print("working...")
Line 524: Line 524:
print("done...")
print("done...")
print()
print()
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 534: Line 534:
=={{header|Quackery}}==
=={{header|Quackery}}==


<lang Quackery> [ dup * ] is squared ( n --> n )
<syntaxhighlight lang="quackery"> [ dup * ] is squared ( n --> n )
0
0
Line 541: Line 541:
over 1 - squared -
over 1 - squared -
1000 > until ]
1000 > until ]
echo</lang>
echo</syntaxhighlight>


{{out}}
{{out}}
Line 551: Line 551:
Noting that a²-b² ≡ (a+b)(a-b), and that in this instance a = b+1.
Noting that a²-b² ≡ (a+b)(a-b), and that in this instance a = b+1.


<lang Quackery> 1000 2 / 1+ echo</lang>
<syntaxhighlight lang="quackery"> 1000 2 / 1+ echo</syntaxhighlight>


{{out}}
{{out}}
Line 558: Line 558:


=={{header|Raku}}==
=={{header|Raku}}==
<lang perl6>say first { $_² - ($_-1)² > 1000 }, ^Inf;</lang>
<syntaxhighlight lang="raku" line>say first { $_² - ($_-1)² > 1000 }, ^Inf;</syntaxhighlight>
{{out}}
{{out}}
<pre>501</pre>
<pre>501</pre>


=={{header|Ring}}==
=={{header|Ring}}==
<lang ring>
<syntaxhighlight lang="ring">
load "stdlib.ring"
load "stdlib.ring"
see "working..." + nl
see "working..." + nl
Line 581: Line 581:


see "done..." + nl
see "done..." + nl
</syntaxhighlight>
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 590: Line 590:


=={{header|Sidef}}==
=={{header|Sidef}}==
<lang ruby>var N = 1000
<syntaxhighlight lang="ruby">var N = 1000


# Binary search
# Binary search
Line 603: Line 603:
assert_eq(n, m)
assert_eq(n, m)


say "#{n}^2 - #{n-1}^2 = #{n**2 - (n-1)**2}"</lang>
say "#{n}^2 - #{n-1}^2 = #{n**2 - (n-1)**2}"</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 610: Line 610:


=={{header|Verilog}}==
=={{header|Verilog}}==
<lang Verilog>module main;
<syntaxhighlight lang="verilog">module main;
integer i, n;
integer i, n;
Line 620: Line 620:
$finish ;
$finish ;
end
end
endmodule</lang>
endmodule</syntaxhighlight>


=={{header|Wren}}==
=={{header|Wren}}==
The solution '''n''' for some non-negative integer '''k''' needs to be such that: ''n² - (n² - 2n + 1) > k'' which reduces to: ''n > (k + 1)/2''.
The solution '''n''' for some non-negative integer '''k''' needs to be such that: ''n² - (n² - 2n + 1) > k'' which reduces to: ''n > (k + 1)/2''.
<lang ecmascript>var squareDiff = Fn.new { |k| ((k + 1) * 0.5).ceil }
<syntaxhighlight lang="ecmascript">var squareDiff = Fn.new { |k| ((k + 1) * 0.5).ceil }
System.print(squareDiff.call(1000))</lang>
System.print(squareDiff.call(1000))</syntaxhighlight>


{{out}}
{{out}}

Revision as of 12:58, 27 August 2022

Find square difference is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task


Find and show on this page the least positive integer number n, where difference of n*n and (n-1)*(n-1) greater than 1000.
The result is 501 because 501*501 - 500*500 = 251001 - 250000 = 1001 > 1000.



11l

L(n) 1..
   I n^2 - (n - 1)^2 > 1000
      print(n)
      L.break
Output:
501

Ada

with Ada.Text_IO; use Ada.Text_IO;

procedure Find_Square_Difference is
   Last   : Natural := 0;
   Square : Positive;
   Diff   : Positive;
begin
   for N in 1 .. Positive'Last loop
      Square := N ** 2;
      Diff   := Square - Last;
      Last   := Square;
      if Diff > 1000 then
         Put_Line (N'Image);
         exit;
      end if;
   end loop;
end Find_Square_Difference;
Output:
 501

ALGOL 68

Also shows the least positive integer where the difference between n^2 and (n-1)^2 is greater than 32 000 and 2 000 000 000.

BEGIN # find the lowest positive n where the difference between n^2 and (n-1)^2 is > 1000 #
    []INT test = ( 1 000, 32 000, 2 000 000 000 );
    FOR i FROM LWB test TO UPB test DO
        INT required difference = test[ i ];
        # n^2 - ( n - 1 )^2 is n^2 - n^2 + 2n - 1, i.e. 2n - 1 #
        # so 2n - 1 > required difference or n > ( required difference + 1 ) / 2 #
        print( ( "Smallest n where n^2 - (n-1)^2 is > ", whole( required difference, -12 )
               , " is: ", whole( ( ( required difference + 1 ) OVER 2 ) + 1, -12 )
               , newline
               )
             )
    OD
END
Output:
Smallest n where n^2 - (n-1)^2 is >         1000 is:          501
Smallest n where n^2 - (n-1)^2 is >        32000 is:        16001
Smallest n where n^2 - (n-1)^2 is >   2000000000 is:   1000000001

ALGOL W

begin % find the lowest positive n where the difference between n^2 and (n-1)^2 is > 1000 %
    integer requiredDifference;
    requiredDifference := 1000;
    write(  i_w := 1, s_w := 0,
         , "Smallest n where n^2 - (n-1)^2 is > ", requiredDifference
         , " is: ", ( ( requiredDifference + 1 ) div 2 ) + 1
         )
end.
Output:
Smallest n where n^2 - (n-1)^2 is > 1000 is: 501

Arturo

i: new 1
while ø [
    if 1000 < (i^2)-(dec i)^2
        -> break
    inc 'i
]
print i
Output:
501

Asymptote

int fpow(int n) {
  int i = 0;
  while (i^2 - (i-1)^2 < n) ++i;
  return i;
}

write(fpow(1000));

AutoHotkey

while ((n:=A_Index)**2 - (n-1)**2 < 1000)
    continue
MsgBox % result := n
Output:
501

AWK

# syntax: GAWK -f FIND_SQUARE_DIFFERENCE.AWK
BEGIN {
    n = 1001
    while (i^2-(i-1)^2 < n) {
      i++
    }
    printf("%d\n",i)
    exit(0)
}
Output:
501


BASIC

BASIC256

function fpow(n)
	i = 0
	while i^2 - (i-1)^2 < n
		i += 1
	end while
	Return i
end function

print fpow(1001)
end

PureBasic

Procedure fpow(n.i)
  Define i.i
  While Pow(i, 2) - Pow((i-1), 2) < n
    i + 1
  Wend
  ProcedureReturn i
EndProcedure

OpenConsole()
Print(Str(fpow(1001)))
Input()
CloseConsole()

QBasic

FUNCTION fpow (n)
    WHILE (i * i) - ((i - 1) * (i - 1)) < n
        i = i + 1
    WEND
    fpow = i
END FUNCTION

PRINT fpow(1001)

Run BASIC

function fpow(n)
    while i^2-(i-1)^2 < n
        i = i+1
    wend
    fpow = i
end function
 
print fpow(1001)

True BASIC

FUNCTION fpow (n)
    DO WHILE i ^ 2 - (i - 1) ^ 2 < n
       LET i = i + 1
    LOOP
    LET fpow = I
END FUNCTION

PRINT fpow(1001)
END

Tiny BASIC

    LET N = 1001

    LET I = 0
10  LET R = I*I - (I-1)*(I-1)
    IF R >= N THEN GOTO 20
    IF R < N THEN LET I = I + 1
    GOTO 10
20  PRINT I
    END

Yabasic

sub fpow(n)
    while i^2 - (i-1)^2 < n
        i = i + 1
    wend
    Return i
end sub

print fpow(1001)
end


C

#include<stdio.h>
#include<stdlib.h>

int f(int n) {
    int i, i1;
    for(i=1;i*i-i1*i1<n;i1=i, i++);
    return i;
}

int main(void) {
    printf( "%d\n", f(1000) );
    return 0;
}
Output:
501

C++

The C solution is also idomatic in C++. An alterate approach is to use Ranges from C++20.

#include <iostream>
#include <ranges>

int main()
{
    const int maxSquareDiff = 1000;
    auto squareCheck = [maxSquareDiff](int i){return 2 * i - 1 > maxSquareDiff;};
    auto answer = std::views::iota(1) |  // {1, 2, 3, 4, 5, ....}
      std::views::filter(squareCheck) |  // filter out the ones that are below 1000
      std::views::take(1);               // take the first one
    std::cout << answer.front() << '\n';
}
Output:
501

Dart

import 'dart:math';

int leastSquare(int gap) {
  for (int n = 1;; n++) {
    if (pow(n, 2) - pow((n - 1), 2) > gap) {
      return n;
    }
  }
}

void main() {
  print(leastSquare(1000));
}
Output:
501

F#

let n=1000 in printfn $"%d{((n+1)/2)+1}"
Output:
501

Factor

The difference between squares is the odd numbers, so ls(n)=⌈n/2+1⌉.

Works with: Factor version 0.99 2021-06-02
USING: math math.functions prettyprint ;

: least-sq ( m -- n ) 2 / 1 + ceiling ;

1000 least-sq .
Output:
501

Fermat

Func F(n) =
    i:=0;
    while i^2-(i-1)^2<n do i:=i+1 od; i.;

!!F(1000);
Output:
501

FreeBASIC

function fpow(n as uinteger) as uinteger
    dim as uinteger i
    while i^2-(i-1)^2 < n
        i+=1
    wend
    return i
end function

print fpow(1001)
Output:
501

Go

package main

import (
    "fmt"
    "math"
)

func squareDiff(k int) int {
    return int(math.Ceil(float64(k+1) * 0.5))
}

func main() {
    fmt.Println(squareDiff(1000))
}
Output:
501

Haskell

The sequence of differences between successive squares is the sequence of odd numbers.

import Data.List (findIndex)

f = succ . flip div 2

-- Or, with redundant verbosity

g n = i
  where
    Just i = succ <$> findIndex (> n) [1, 3 ..]

main = mapM_ print $ [f, g] <*> [1000]
Output:
501
501

jq

Works with: jq

Works with gojq, the Go implementation of jq

So this question is essentially asking to solve `2n - 1 > 1000`. Wow.

At the risk of hastening RC's demise, one could offer a jq solution like so:

first( range(1; infinite) | select( 2 * . - 1 > 1000 ) )

Or, for anyone envious of Bitcoin's contribution to global warming:

first( range(1; infinite) | select( .*. - ((.-1) | .*.) > 1000 ) )
Output:
501

Julia

julia> findfirst(n -> n*n - (n-1)*(n-1) > 1000, 1:1_000_000)
501

Pari/GP

F(n)=i=0;while(i^2-(i-1)^2<n,i=i+1);return(i);
print(F(1000))
Output:
501

Pencil and Paper

Find the smallest positive integer number n, where the difference of n2 and (n - 1)2 is greater than 1000.

r: roots of squares
s: successive squares
d: differences between successive squares,
   (a.k.a, the list of positive odd integers)

r: 0, 1, 2, 3,  4,  5,  6,  7,  8,  9,  10, ...
s: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ...
d: 1, 3, 5, 7,  9, 11, 13, 15, 17, 19, ...

r: n
s: n * n
d: n * 2 + 1

solve for d > 1,000
the first odd integer greater than 1,000 is 1,001
(1,001 + 1) / 2 = 501 ( = n)

Perl

#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Least_square
use warnings;

my $n = 1;
$n++ until $n ** 2 - ($n-1) ** 2 > 1000;
print "$n\n";
Output:
501

Phix

Essentially Wren equivalent, but explained in excruciating detail especially for enyone that evidently needs elp, said Eeyore.

with javascript_semantics
printf(1,"""
n*n - (n - 1)*(n - 1) > 1000
n*n - (n*n - 2*n + 1) > 1000
n*n - n*n + 2*n - 1 > 1000
2*n - 1 > 1000
2*n > 1001
n > 500.5
n = %d
""",ceil(500.5))
Output:
n*n - (n - 1)*(n - 1) > 1000
n*n - (n*n - 2*n + 1) > 1000
n*n - n*n + 2*n - 1 > 1000
2*n - 1 > 1000
2*n > 1001
n > 500.5
n = 501

Or if you prefer, same output:

with javascript_semantics
string e                                                -- equation
procedure p(string s)
    e := s                                              -- set/save
    printf(1,"%s\n",s)
end procedure
p("n*n - (n - 1)*(n - 1) > 1000")                       -- original
p(substitute(e,"(n - 1)*(n - 1)",                   
               "(n*n - 2*n + 1)"))                      -- expand
string{l,m,r} = scanf(e,"%s - (%s)%s")[1]
m = substitute_all(m,"-+|","|-+")                       -- unsign
p(sprintf("%s - %s%s",{l,m,r}))
p(substitute(e,"n*n - n*n + ",""))                      -- eliminate
p(substitute_all(e,{" - 1","1000"},{"","1001"}))        -- add 1
p(substitute_all(e,{"2*","1001"},{"","500.5"}))         -- divide by 2
p(substitute(e,"> 500.5",sprintf("= %d",ceil(500.5))))  -- solve

or even:

without js -- (user defined types are not implicitly called)
type pstring(string s) printf(1,"%s\n",s) return true end type
pstring e                                               -- equation
e = "n*n - (n - 1)*(n - 1) > 1000"                      -- original
e = substitute(e,"(n - 1)*(n - 1)",                 
                 "(n*n - 2*n + 1)")                     -- expand
string{l,m,r} = scanf(e,"%s - (%s)%s")[1]
m = substitute_all(m,"-+|","|-+")                       -- unsign
e = sprintf("%s - %s%s",{l,m,r})
e = substitute(e,"n*n - n*n + ","")                     -- eliminate
e = substitute_all(e,{" - 1","1000"},{"","1001"})       -- add 1
e = substitute_all(e,{"2*","1001"},{"","500.5"})        -- divide by 2
e = substitute(e,"> 500.5",sprintf("= %d",ceil(500.5))) -- solve

PL/M

This can be compiled with the original 8080 PL/M compiler and run under CP/M or an emulator.
Note that the original 8080 PL/M compiler only supports 8 and 16 bit unisgned numbers.

100H: /* FIND THE LEAST +VE N WHERE N SQUARED - (N-1) SQUARED > 1000 */

   BDOS: PROCEDURE( FN, ARG ); /* CP/M BDOS SYSTEM CALL */
      DECLARE FN BYTE, ARG ADDRESS;
      GOTO 5;
   END BDOS;
   PR$CHAR:   PROCEDURE( C ); DECLARE C BYTE;    CALL BDOS( 2, C ); END;
   PR$STRING: PROCEDURE( S ); DECLARE S ADDRESS; CALL BDOS( 9, S ); END;
   PR$NL:     PROCEDURE; CALL PR$CHAR( 0DH ); CALL PR$CHAR( 0AH );  END;
   PR$NUMBER: PROCEDURE( N );
      DECLARE N ADDRESS;
      DECLARE V ADDRESS, N$STR( 6 ) BYTE, W BYTE;
      V = N;
      W = LAST( N$STR );
      N$STR( W ) = '$';
      N$STR( W := W - 1 ) = '0' + ( V MOD 10 );
      DO WHILE( ( V := V / 10 ) > 0 );
         N$STR( W := W - 1 ) = '0' + ( V MOD 10 );
      END;
      CALL PR$STRING( .N$STR( W ) );
   END PR$NUMBER;

   PRINT$LEAST: PROCEDURE( DIFF );
      DECLARE DIFF ADDRESS;
      CALL PR$STRING( . 'THE LOWEST N WHERE THE SQUARES OF N AND N-1 $' );
      CALL PR$STRING( . 'DIFFER BY MORE THAN $' );
      CALL PR$NUMBER( DIFF );
      CALL PR$STRING( .' IS: $' );
      CALL PR$NUMBER( ( ( DIFF + 1 ) / 2 ) + 1 );
      CALL PR$NL;
   END PRINT$LEAST ;
   CALL PRINT$LEAST(  1000 );
   CALL PRINT$LEAST( 32000 );
   CALL PRINT$LEAST( 65000 );

EOF
Output:
THE LOWEST N WHERE THE SQUARES OF N AND N-1 DIFFER BY MORE THAN 1000 IS: 501
THE LOWEST N WHERE THE SQUARES OF N AND N-1 DIFFER BY MORE THAN 32000 IS: 16001
THE LOWEST N WHERE THE SQUARES OF N AND N-1 DIFFER BY MORE THAN 65000 IS: 32501

Python

import math
print("working...")
limit1 = 6000
limit2 = 1000
oldSquare = 0
newSquare = 0

for n in range(limit1):
    newSquare = n*n
    if (newSquare - oldSquare > limit2):
     print("Least number is = ", end = "");
     print(int(math.sqrt(newSquare)))
     break
    oldSquare = n*n

print("done...")
print()
Output:
working...
Least number is = 501
done...

Quackery

  [ dup * ] is squared ( n --> n )
  
  0 
  [ 1+
    dup squared 
    over 1 - squared - 
    1000 > until ]
  echo
Output:
501

Using algebra

Noting that a²-b² ≡ (a+b)(a-b), and that in this instance a = b+1.

  1000 2 / 1+ echo
Output:
501

Raku

say first { $_² - ($_-1)² > 1000 }, ^Inf;
Output:
501

Ring

load "stdlib.ring"
see "working..." + nl
limit1 = 6000
limit2 = 1000
oldPrime = 0
newPrime = 0

for n = 1 to limit1
    newPrime = n*n
    if newPrime - oldPrime > limit2
       see "Latest number is = " + sqrt(newPrime) + nl
       exit
    ok
    oldPrime = n*n
next

see "done..." + nl
Output:
working...
Latest number is = 501
done...

Sidef

var N = 1000

# Binary search
var n = bsearch_ge(1, N, {|k|
    k**2 - (k-1)**2 <=> N+1
})

# Closed-form
var m = ceil((N + 1 + N&1) / 2)

assert(n**2 - (n-1)**2 > N)
assert_eq(n, m)

say "#{n}^2 - #{n-1}^2 = #{n**2 - (n-1)**2}"
Output:
501^2 - 500^2 = 1001

Verilog

module main;
  integer i, n;
  
  initial begin
    n = 1000;
    i = 0;
    while (i ** 2 - (i - 1) ** 2 < n) i=i+1;
    $display(i);
    $finish ;
  end
endmodule

Wren

The solution n for some non-negative integer k needs to be such that: n² - (n² - 2n + 1) > k which reduces to: n > (k + 1)/2.

var squareDiff = Fn.new { |k| ((k + 1) * 0.5).ceil }
System.print(squareDiff.call(1000))
Output:
501

XPL0

n^2 - (n - 1)^2 > 1000
n^2 - (n^2 - 2n + 1) > 1000
2n - 1 > 1000
2n > 1001
n > 500.5
n = 501