I'm not sure why you are getting different results from sagenb.com and
from the "shell", but I would guess that you must be using two different
versions of Sage. Either way...
The problem is that when you divide two integers, the result is always a
rational number, whether or not that rational number happens to be an
integer. Then, when you ask for the divisors of a rational number (Not
that I'm even sure why this should make sense), you get back a list of
rational numbers. For rational numbers, Sage decides to always return a
GCD of 1:
sage: a.gcd
<built-in method gcd of sage.rings.rational.Rational object at 0xb7c49cdc>
sage: a.gcd?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in method gcd of sage.rings.rational.Rational object at
0xb7c49cdc>
Namespace: Interactive
Docstring:
Return a gcd of the rational numbers self and other.
If self = other = 0, this is by convention 0. In all other
cases it can (mathematically) be any nonzero rational number,
but for simplicity we choose to always return 1.
EXAMPLES::
sage: gcd(1/3, 2/1)
1
sage: gcd(1/1, 0/1)
1
sage: gcd(0/1, 0/1)
0
In particular, we have:
sage: gcd(3/1, 3)
1
sage: gcd(3, 3)
3
You can get the behavior that you want by forcing quot to be an Integer,
as in:
quot = Integer(D/dhat)
I feel like Sage is doing something wrong here, but I'm not sure what
the right thing to do is. A strange example:
sage: factor(15/2)
2^-1 * 3 * 5
sage: a = divisors(15/2); a
[1, 3, 5, 15]
sage: type(a[0])
<type 'sage.rings.rational.Rational'>
On Mon, 2009-03-02 at 18:12 -0600, Martin Mereb wrote:
> I had this function in a worksheet at sagenb.com
>
> def Z(D,t,dhat):
> quot=D/dhat
> sum=0
> for l in divisors(quot):
> a=l*dhat
> print a, t, GCD(a,t)
> sum=sum+GCD(a,t)
> return sum
>
>
> and Z(3,3,1) returns
> 1 3 1
> 3 3 1
> 2
>
> which means GCD(3,3)=1
>
> I know that in order to solve the problem I had to put quot=ZZ(D/dhat)
> instead of quot=D/dhat
> (I took me a while, though).
>
> I didn't have that problem in the Shell
> sage: def Z(D,t,dhat):
> ....: quot=D/dhat
> ....: sum=0
> ....: for l in divisors(quot):
> ....: a=l*dhat
> ....: print a, t, GCD(a,t)
> ....: sum=sum+GCD(a,t)
> ....: return sum
> ....:
> sage: Z(3,3,1)
> 1 3 1
> 3 3 3
> 4
>
> so I see a difference here.
> cheers
>
>
> tincho
>
> >
>
>
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---