Hi, Mukesh, I had the similar issue on your example of 8.

My algorithm is actually a little bit "reversed" from what you have.  You
see, I started with generating (a, b) pairs, and then look for the possible
n which can divide a+bi (or a-bi, or b+ai, or b-ai).

In your example case, 4+4i is indeed a factor of 8.  In fact, gcd(4, 4) =
4.  And 4^2 + 4^2 is 32.  If you take into account of the gcd and use it to
divide the 32, you'll end up with 8 (which is the first n which can divide
4+4i).  After you see the first term (in this case, 8), you can see that
4+4i also divides, 16, 24, 32, 40, ... etc.

Generally, given a and b, ... the first n which divides a+bi is: a^2+b^2 div
gcd(a, b).  Please ponder this a little bit, and then you'll see some
pattern.  You'll also see the relationship of a+bi and k(a+bi), when k is a
positive integer > 1.

I just want to reiterate that my algorithm is not fast at all, again it runs
a little bit over a minute for this one.

Best,
-Lego

On 6/28/07, mukesh tiwari <[EMAIL PROTECTED]> wrote:
>
>
> Hi Lego   i need your help . i am   not able to find  any efficient
> algorithm  to find the divisiors of integer in gaussian  ring . so i
> used a  brute force methode to find all the gaussian divisiors of
> integer . here is my code ..
>
> #include<stdio.h>
> #include<math.h>
>
>         main()
>           {
>                 int n,x,y,k,w;
>                 while(scanf("%d",&n)!=EOF)
>                  {
>                         k=sqrt(n);
>                         for(x=1;x<=k;x++)
>                          {
>                                 for(y=1;y<=k;y++)
>                                  {
>                                         w=x*x+y*y;
>                                         if(x!=y && n%w==0)
>                                           printf("%d + i%d\n",x,y);
>                                         else if( x==y && (n*x)%w==0)
>                                           printf("%d + i%d\n",x,y);
>                                 }
>                         }
>                 }
>           }
>
> my algorithm is
> x^2+y^2=n . in order to find all the  complex divisiors  i loop from
> 1<=x<=sqrt(n)
> and 1<=y<=sqrt(n) .  My program generates quite good result but not as
> accurate as i need .
> if i  give input 13 output is 2+3i and 3+2i but if i give 8 it gives
> 1+i and 2+2i but i think 4+ 4i is  also a factor but my program can't
> find it becoz  i am iterating  upto sqrt(8)=2 so plz help me . if u
> have any  some good tutorial or link plz send me as i am new in feild
> of number theory .
> thnkx .
>
> On Jun 27, 10:08 pm, "Lego Haryanto" <[EMAIL PROTECTED]> wrote:
> > Well speaking about number of divisors of n ... all you need to do is to
> > find the prime factorization of n.
> >
> > An example: n = 12, which is 2x2x3.
> >
> > As you can see, there are 2 prime factors, one appears 2 times, and the
> > other appears 1 time.  So, the number of divisors will be:
> >
> > (2+1) * (1+1) = 3 x 2 = 6
> >
> > Your example of 25 also applies, ... 25 = 5 x 5 ... there is only one
> prime,
> > appearing twice.  So number of divisors is: (2+1) = 3.
> >
> > To get ALL the divisors, it's as easy as trying all combination of prime
> > multiplications (each can be used 0 times up to the number it appears in
> the
> > prime factorization of n).
> >
> > -Lego
> >
> > On 6/27/07, mukesh tiwari <[EMAIL PROTECTED]> wrote:
> >
> >
> >
> >
> >
> > > ya you are right . this is project euler problem .
> >
> > > until now i have found that  i can determine how many devisiors of
> > > number  in sqrt(n) but  what are the  divisiors  above aqrt(n) i am
> > > not able to  determine.
> > > if sqrt(n) is perfect square and there are k factors upto sqrt(n)
> > > then total number of divisiors will be (2*k-1) otherwise (2*k).
> >
> > > i.e.    25 is perfect squre and  sqrt(25)=5 .There are only two
> > > divisiors 1 and 5 then total number of divisiors of 25 will (2*2-1)=3
> > > but here problem arise . after sqrt(n) i can not find what will be
> > > other factors .
> >
> > > if some how i can over come this problem than for each  divisior of
> > > number i have to find out all the prime  factors and check out how
> > > many of them are in form of 4k+1 and how many  are of 4k+3 . for all
> 4k
> > > +1 prime numbers i have to find
> > > p=a^2+b^2.
> >
> > > but still i don't know how much it will be efficient becoz till now i
> > > haven't coded this problem .
> >
> > > On Jun 26, 6:08 am, "Lego Haryanto" <[EMAIL PROTECTED]> wrote:
> > > > This is most likely about a Project Euler problem.
> >
> > > > A tough one, I don't know how to get the result under 60s time
> > > limit.  To
> > > > capture the Gaussian factors a+bi that divides an integer, I
> generated
> > > pairs
> > > > of a and b (which is relatively prime to each other), and for each,
> I
> > > > observed the a^2+b^2 denominator to see the smallest n which can
> divide
> > > > a^2+b^2, ... something like that.  I'm sure you already note that if
> > > a+bi is
> > > > a factor, then a-bi is also a factor, and similiarly when a != b,
> b-ai
> > > and
> > > > b+ai are also Gaussian factors.
> >
> > > > My solution is very ugly but it does solve the problem in a little
> bit
> > > over
> > > > 60 seconds.
> >
> > > > I'm sure there exists more elegant solution for this.
> >
> > > > Best,
> > > > -Lego
> >
> > > > On 6/22/07, mukesh tiwari <[EMAIL PROTECTED]> wrote:
> >
> > > > > hello everybody .
> > > > >   i want to know  algorithm for finding gaussian factor of  real
> > > > > number .
> > > > > like for 5 there are five gaussian factors
> > > > > 1, 1+2i, 1-2i, 2+i, 2-i, 5 and there sum is 12 . so can any one
> help
> > > > > me on this topic . i search lot on google but could not find any
> > > > > anything . if u have any such kind of link so kindly send me .
> thnkx
> > > > > in advance .
> >
> > > > --
> > > > Fear of the LORD is the beginning of knowledge (Proverbs 1:7)
> >
> > --
> > Fear of the LORD is the beginning of knowledge (Proverbs 1:7)
>
>
> >
>


-- 
Fear of the LORD is the beginning of knowledge (Proverbs 1:7)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/algogeeks
-~----------~----~----~----~------~----~------~--~---

Reply via email to