Sponsored Content
Operating Systems OS X (Apple) A Fun Perfect Square Checker Using Integer Arithmetic Only... ;o) Post 302952733 by bakunin on Friday 21st of August 2015 09:29:21 AM
Old 08-21-2015
Quote:
Originally Posted by wisecracker
But I really enjoy forced restriction and non-standard solutions to a problem.

My bash version requires no knowledge of serious maths whatsoever and uses an observation that is little known to the general public...
You mean that sqares of consecutive natural numbers have the property x[i+1]**2 - x[i]**2 = 2x[i]+1 = 2x[i+1]-1?

OK, here is a short integer implementation, which comes "from top", not "from bottom" (meaning the guesses are always higher than the real value and dropping to it).

Code:
#! /bin/bash

pNextGuess ()
{
     typeset -i iLastGuess=$1
     typeset -i iSquare=$2
     typeset -i iNextGuess=$(( ( iLastGuess + iSquare / iLastGuess ) / 2 ))

     echo $iNextGuess

     return 0
}

# main ()
typeset -i iSquare=$1
typeset -i iGuess=1
typeset -i iNextGuess=0

while : ; do
     iNextGuess=$(pNextGuess $iGuess $iSquare)
     if [ $iNextGuess -eq $iGuess ] ; then
          if [ $(( iGuess * iGuess )) -eq $iSquare ] ; then
               echo "Solution is $iGuess"
          else
               echo "no perfect square, best approximation is $iGuess"
          fi
          exit 0
     fi
     iGuess=iNextGuess
done

A small problem, though: some values cause the guesses to oszillate between two values because of the integers: 960 (961 would be 31**2) is such a number, for instance, because the final guesses will be 30, 31, 30, 31, 30, ....

I (don't think this helps anyone, but) hope this increases the fun.

bakunin
 

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

extraction of perfect text from file.

Hi All, I have a file of the following format. <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="manager"/> <role rolename="admin"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user... (5 Replies)
Discussion started by: nua7
5 Replies

2. UNIX for Dummies Questions & Answers

A perfect number shell program

Here's my work of testing whether a number input is perfect or not.. echo Enter a number read no i=1 ans=0 while do if then ans='expr $ans + $i' fi i='expr $i + 1' done if then echo $no is perfect else echo $no is NOT perfect fi (12 Replies)
Discussion started by: Cyansnow
12 Replies

3. AIX

I want the perfect user-interface

I've got an aix-box somewhere on the network and a PC on my desk. Nothing fancy so far. The PC is made dual-boot: - windowsXP with putty & winSCP or - slackware 13 with xfce4 installed. The aix-box runs DB2 v8.2 and I've installed db2top to monitor the database. db2top is a character... (0 Replies)
Discussion started by: dr_te_z
0 Replies

4. Shell Programming and Scripting

Delete text between square brackets and also delete those square brackets using sed or awk

Hi All, I have a text file which looks like this: computer programming systems engineering I want to get rid of these square brackets and also the text that is inside these brackets. So that my final text file looks like this: computer programming systems engineering I am using... (3 Replies)
Discussion started by: shoaibjameel123
3 Replies

5. Shell Programming and Scripting

how to compare string integer with an integer?

hi, how to I do this? i="4.000" if ; then echo "smaller" fi how do I convert the "4.000" to 4? Thanks! (4 Replies)
Discussion started by: h0ujun
4 Replies

6. UNIX for Dummies Questions & Answers

Can you perfect my sed ?

I want to print only the lines that meet the criteria : "worde:" and "wordo;" I got this far: sed -n '/\(*\)\1e:\1o;/p;' But it doesn't quite work. Can someone please perfect it and tell me exactly how its a fixed version/what was wrong with mine? Thanks heaps, (1 Reply)
Discussion started by: maximus73
1 Replies

7. Shell Programming and Scripting

egrep line with perfect mach

Hi Input File A L006 AL01 0 (OCK) L006 A006 0 (OCK) L011 AR11 1 (NLOCK) Input File B L006 AL01 0 (OCK) L006 A006 0 (OCK) Need Egrep Command for perfect Match Thanks (4 Replies)
Discussion started by: asavaliya
4 Replies

8. Shell Programming and Scripting

Not able to find the perfect code...Geting confused in between

I have to find last delimiter in each line of a file and store the value after the last '/' in a variable in ksh script...Pls Pls help me:(The file is as shown below: /opt/apps/cobqa/apps/abadv/bind/advc0007.bnd /opt/apps/cobqa/apps/abbrio/bind/naac6115.bnd... (5 Replies)
Discussion started by: bhavanabahety
5 Replies
funcolumnlookup(3)						SAORD Documentation						funcolumnlookup(3)

NAME
FunColumnLookup - lookup a Funtools column SYNOPSIS
#include <funtools.h> int FunColumnLookup(Fun fun, char *s, int which, char **name, int *type, int *mode, int *offset, int *n, int *width) DESCRIPTION
The FunColumnLookup() routine returns information about a named (or indexed) column. The first argument is the Fun handle associated with this set of columns. The second argument is the name of the column to look up. If the name argument is NULL, the argument that follows is the zero-based index into the column array of the column for which information should be returned. The next argument is a pointer to a char *, which will contain the name of the column. The arguments that follow are the addresses of int values into which the following information will be returned: o type: data type of column: o A: ASCII characters o B: unsigned 8-bit char o I: signed 16-bit int o U: unsigned 16-bit int (not standard FITS) o J: signed 32-bit int o V: unsigned 32-bit int (not standard FITS) o E: 32-bit float o D: 64-bit float o mode: bit flag status of column, including: o COL_ACTIVE 1 is column activated? o COL_IBUF 2 is column in the raw input data? o COL_PTR 4 is column a pointer to an array? o COL_READ 010 is read mode selected? o COL_WRITE 020 is write mode selected? o COL_REPLACEME 040 is this column being replaced by user data? o offset: byte offset in struct o n: number of elements (i.e. size of vector) in this column o width: size in bytes of this column If the named column exists, the routine returns a positive integer, otherwise zero is returned. (The positive integer is the index+1 into the column array where this column was located.) If NULL is passed as the return address of one (or more) of these values, no data is passed back for that information. For example: if( !FunColumnLookup(fun, "phas", 0, NULL NULL, NULL, NULL, &npha, NULL) ) gerror(stderr, "can't find phas column "); only returns information about the size of the phas vector. SEE ALSO
See funtools(7) for a list of Funtools help pages version 1.4.2 January 2, 2008 funcolumnlookup(3)
All times are GMT -4. The time now is 05:18 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy