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

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

  1. aregee

    aregee Guest

    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
    #1
    1. Advertising

  2. 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
    #2
    1. Advertising

  3. aregee

    Gary Herron Guest

    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
    #3
  4. aregee

    Owen Guest

    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
    #4
  5. aregee

    Ian Kelly Guest

    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
    #5
  6. 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
    #6
  7. aregee

    aregee Guest

    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
    #7
  8. 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
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    0
    Views:
    1,214
  2. Fabio G.

    How to compute 2^N in VHDL?

    Fabio G., May 30, 2004, in forum: VHDL
    Replies:
    3
    Views:
    1,550
    Fabio G.
    May 31, 2004
  3. Sydex
    Replies:
    12
    Views:
    6,475
    Victor Bazarov
    Feb 17, 2005
  4. Replies:
    5
    Views:
    630
  5. PerlFAQ Server
    Replies:
    0
    Views:
    264
    PerlFAQ Server
    Feb 2, 2011
Loading...

Share This Page