# compute the double square...... :(

Discussion in 'Python' started by aregee, Jan 9, 2011.

1. ### aregeeGuest

Double Squares
A double-square number is an integer X which can be expressed as the
sum of two perfect squares. For example, 10 is a double-square because
10 = 32 + 12. Your task in this problem is, given X, determine the
number of ways in which it can be written as the sum of two squares.
For example, 10 can only be written as 32 + 12 (we don't count 12 + 32
as being different). On the other hand, 25 can be written as 52 + 02
or as 42 + 32.

Input
You should first read an integer N, the number of test cases. The next
N lines will contain N values of X.
Constraints
0 â‰¤ X â‰¤ 2147483647
1 â‰¤ N â‰¤ 100
Output
For each value of X, you should output the number of ways to write X
as the sum of two square

Is the code mention below solution to this question ???? what is the
fault...
Error :
aregee@aregee-laptop:~/Desktop\$ python pie.py
enter a number::10
pie.py:3: Deprecation Warning: integer argument expected, got float
for b in range(0,(x**0.5)/2):

#Double square....

x = input("enter a number::")
for b in range(0,(x**0.5)/2):
a = (x-(b**2))**0.5
try:
a = int(a)
except:
print("not an integer")
exit(1)

count = 0;
count = count + 1;
if (x == a**2 + b**2):

print "double square"

aregee, Jan 9, 2011

2. ### Corey RichardsonGuest

On 01/09/2011 01:10 AM, aregee wrote:
>
> Double Squares
> A double-square number is an integer X which can be expressed as the
> sum of two perfect squares. For example, 10 is a double-square because
> 10 = 32 + 12. Your task in this problem is, given X, determine the
> number of ways in which it can be written as the sum of two squares.
> For example, 10 can only be written as 32 + 12 (we don't count 12 + 32
> as being different). On the other hand, 25 can be written as 52 + 02
> or as 42 + 32.
>
> Input
> You should first read an integer N, the number of test cases. The next
> N lines will contain N values of X.
> Constraints
> 0 â‰¤ X â‰¤ 2147483647
> 1 â‰¤ N â‰¤ 100
> Output
> For each value of X, you should output the number of ways to write X
> as the sum of two square
>
> Is the code mention below solution to this question ???? what is the
> fault...
> Error :
> aregee@aregee-laptop:~/Desktop\$ python pie.py
> enter a number::10
> pie.py:3: Deprecation Warning: integer argument expected, got float
> for b in range(0,(x**0.5)/2):

That says it all. You can't use a float in range(), use int(x ** 0.5) if
that's what you need, but the behavior won't be the same. My suggestion
would be to try to find a different way to do it.
>
> #Double square....
>
> x = input("enter a number::")
> for b in range(0,(x**0.5)/2):
> a = (x-(b**2))**0.5
> try:
> a = int(a)
> except:
> print("not an integer")
> exit(1)
>

Here it would be better to use:
if type(a) != int
print("Not an integer")
exit(1)
> count = 0;
> count = count + 1;
> if (x == a**2 + b**2):
>
> print "double square"

~Corey Richardson

Corey Richardson, Jan 9, 2011

3. ### Gary HerronGuest

On 01/08/2011 10:10 PM, aregee wrote:
> Double Squares
> A double-square number is an integer X which can be expressed as the
> sum of two perfect squares. For example, 10 is a double-square because
> 10 = 32 + 12. Your task in this problem is, given X, determine the
> number of ways in which it can be written as the sum of two squares.
> For example, 10 can only be written as 32 + 12 (we don't count 12 + 32
> as being different). On the other hand, 25 can be written as 52 + 02
> or as 42 + 32.

Huh? In what number system does 10 = 32 + 12?
And how do either 32 or 12 qualify as perfect squares?

Gary Herron

> Input
> You should first read an integer N, the number of test cases. The next
> N lines will contain N values of X.
> Constraints
> 0 â‰¤ X â‰¤ 2147483647
> 1 â‰¤ N â‰¤ 100
> Output
> For each value of X, you should output the number of ways to write X
> as the sum of two square
>
> Is the code mention below solution to this question ???? what is the
> fault...
> Error :
> aregee@aregee-laptop:~/Desktop\$ python pie.py
> enter a number::10
> pie.py:3: Deprecation Warning: integer argument expected, got float
> for b in range(0,(x**0.5)/2):
>
> #Double square....
>
> x = input("enter a number::")
> for b in range(0,(x**0.5)/2):
> a = (x-(b**2))**0.5
> try:
> a = int(a)
> except:
> print("not an integer")
> exit(1)
>
> count = 0;
> count = count + 1;
> if (x == a**2 + b**2):
>
> print "double square"

Gary Herron, Jan 9, 2011
4. ### OwenGuest

On Jan 9, 6:14Â pm, Gary Herron <> wrote:
> On 01/08/2011 10:10 PM, aregee wrote:
>
> > Double Squares
> > A double-square number is an integer X which can be expressed as the
> > sum of two perfect squares. For example, 10 is a double-square because
> > 10 = 32 + 12. Your task in this problem is, given X, determine the
> > number of ways in which it can be written as the sum of two squares.
> > For example, 10 can only be written as 32 + 12 (we don't count 12 + 32
> > as being different). On the other hand, 25 can be written as 52 + 02
> > or as 42 + 32.

>
> Huh? Â In what number system does Â 10 = 32 + 12?
> And how do either 32 or 12 qualify as perfect squares?
>
> Gary Herron
>
>
>
>
>
>
>
> > Input
> > You should first read an integer N, the number of test cases. The next
> > N lines will contain N values of X.
> > Constraints
> > 0 â‰¤ X â‰¤ 2147483647
> > 1 â‰¤ N â‰¤ 100
> > Output
> > For each value of X, you should output the number of ways to write X
> > as the sum of two square

>
> > Is the code mention below solution to this question ???? what is the
> > fault...
> > Error :
> > aregee@aregee-laptop:~/Desktop\$ python pie.py
> > enter a number::10
> > pie.py:3: Deprecation Warning: integer argument expected, got float
> > Â  Â for b in range(0,(x**0.5)/2):

>
> > #Double square....

>
> > x = input("enter a number::")
> > for b in range(0,(x**0.5)/2):
> > Â  Â  Â  Â a = (x-(b**2))**0.5
> > try:
> > Â  Â  Â  Â a = int(a)
> > except:
> > Â  Â  Â  Â print("not an integer")
> > Â  Â  Â  Â exit(1)

>
> > Â  Â  Â  Â count = 0;
> > Â  Â  Â  Â count = count + 1;
> > if (x == a**2 + b**2):

>
> > Â  Â  Â  Â print "double square"

Well that he means 3(squared)+1(squared) [3 superscript 2 etc]

Owen

Owen, Jan 9, 2011
5. ### Ian KellyGuest

On 1/8/2011 11:10 PM, aregee wrote:
> pie.py:3: Deprecation Warning: integer argument expected, got float
> for b in range(0,(x**0.5)/2):

I expect you want range(0, int((x / 2) ** 0.5) + 1), no?

> for b in range(0,(x**0.5)/2):
> a = (x-(b**2))**0.5
> try:
> a = int(a)
> except:
> print("not an integer")
> exit(1)

Your indentation is confusing. Is the try-except contained inside the
for loop or not?

And what are you actually trying to test for here? The assignment here
of "a = int(a)" will never throw an exception as long as the loop runs.

>
> count = 0;
> count = count + 1;

Again, confusing indentation. Is this supposed to be part of the except
block? And what is the purpose of incrementing count if you're going to
set it to 0 immediately before? You might as well just write "count = 1"

> if (x == a**2 + b**2):
>
> print "double square"

This also appears to be outside of the loop.

Ian Kelly, Jan 9, 2011
6. ### Cedric SchmeitsGuest

On Jan 9, 7:10Â am, aregee <> wrote:
> Double Squares
> A double-square number is an integer X which can be expressed as the
> sum of two perfect squares. For example, 10 is a double-square because
> 10 = 32 + 12. Your task in this problem is, given X, determine the
> number of ways in which it can be written as the sum of two squares.
> For example, 10 can only be written as 32 + 12 (we don't count 12 + 32
> as being different). On the other hand, 25 can be written as 52 + 02
> or as 42 + 32.
>
> Input
> You should first read an integer N, the number of test cases. The next
> N lines will contain N values of X.
> Constraints
> 0 â‰¤ X â‰¤ 2147483647
> 1 â‰¤ N â‰¤ 100
> Output
> For each value of X, you should output the number of ways to write X
> as the sum of two square
>
> Is the code mention below solution to this question ???? what is the
> fault...
> Error :
> aregee@aregee-laptop:~/Desktop\$ python pie.py
> enter a number::10
> pie.py:3: Deprecation Warning: integer argument expected, got float
> Â  for b in range(0,(x**0.5)/2):
>
> #Double square....
>
> x = input("enter a number::")
> for b in range(0,(x**0.5)/2):
> Â  Â  Â  a = (x-(b**2))**0.5
> try:
> Â  Â  Â  a = int(a)
> except:
> Â  Â  Â  print("not an integer")
> Â  Â  Â  exit(1)
>
> Â  Â  Â  count = 0;
> Â  Â  Â  count = count + 1;
> if (x == a**2 + b**2):
>
> Â  Â  Â  print "double square"

aregee,

The problem you had was that you put a division by 2 in the range, if
x would be 25 than x**0.5 = 5.0 than you would feed range with 2.5 and
than you get the warning. Also I don't understand why you use de
division by 2, because if for instance you would take 25 you get 5 and
0 but you mis 3 and 4 as match. I've put in a tried list to

I would try the following:

#Double square....
x = input("enter a number::")
for b in range(0,int((x**0.5))):
a = (x-(b**2))**0.5
try:
a = int(a)
except:
print("not an integer")
exit(1)

if a < b:
# when a is smaller than b we already have this match
# and all the following matches we also have
break
if (x == a**2 + b**2):
print "double square %s = %s**2 + %s**2" % (x, a, b)

Cedric Schmeits, Jan 9, 2011
7. ### aregeeGuest

hey all thanks for yr help,i got it right .....n sorry for
confussions...i m very new to python...just started learning it couple
of days ago...

Ian Kelly wrote:
> On 1/8/2011 11:10 PM, aregee wrote:
> > pie.py:3: Deprecation Warning: integer argument expected, got float
> > for b in range(0,(x**0.5)/2):

>
> I expect you want range(0, int((x / 2) ** 0.5) + 1), no?
>
> > for b in range(0,(x**0.5)/2):
> > a = (x-(b**2))**0.5
> > try:
> > a = int(a)
> > except:
> > print("not an integer")
> > exit(1)

>
> Your indentation is confusing. Is the try-except contained inside the
> for loop or not?
>
> And what are you actually trying to test for here? The assignment here
> of "a = int(a)" will never throw an exception as long as the loop runs.
>
> >
> > count = 0;
> > count = count + 1;

>
> Again, confusing indentation. Is this supposed to be part of the except
> block? And what is the purpose of incrementing count if you're going to
> set it to 0 immediately before? You might as well just write "count = 1"
>
> > if (x == a**2 + b**2):
> >
> > print "double square"

>
> This also appears to be outside of the loop.

aregee, Jan 9, 2011
8. ### Alan MackenzieGuest

aregee <> wrote:

> Double Squares
> A double-square number is an integer X which can be expressed as the
> sum of two perfect squares. For example, 10 is a double-square because
> 10 = 32 + 12. Your task in this problem is, given X, determine the
> number of ways in which it can be written as the sum of two squares.
> For example, 10 can only be written as 32 + 12 (we don't count 12 + 32
> as being different). On the other hand, 25 can be written as 52 + 02
> or as 42 + 32.

There is interesting mathematics involved in "double squares". Such
properties are intimately bound up with the factorisation of the number.

It can be shown that:
(i) a prime number of the form 4n + 1 is a double square in exactly one
way. So is 2. E.g. 73 = 64 + 9, 2 = 1 + 1.

(ii) a prime number of the form 4n + 3 is not a double square.

(iii) The product of m distinct primes, each of the form 4n + 1, is a
double square in 2^(m-1) ways. E.g. 5*13 = 65 = 64 + 1 = 49 + 16

(iv) If k = a^2 + b^2, l = c^2 + d^2, then:
kl = (ac + bd)^2 + (ad - bc)^2
= (ac - bd)^2 + (ad + bc)^2.

(v) if k is a prime of the form 4n + 1, then k^m is a double square in
(m + 2) / 2 ways. E.g. 5^4 = 625 = 625 + 0 = 576 + 49 = 400 + 225.

(vi) .... and so on.

It's all in the factorisation!

--
Alan Mackenzie (Nuremberg, Germany).

Alan Mackenzie, Jan 9, 2011