Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Simple simple program error...please help

Reply
Thread Tools

Simple simple program error...please help

 
 
tasheeta@gmail.com
Guest
Posts: n/a
 
      11-01-2005
In my simple program I am getting this error..please help

I am trying to find integers where 65537i + 3551j = 1

error: cannot convert `__complex__ int' to `long int' in
assignment


#include <iostream>
#include <complex>
#include <cmath>

using namespace std;

int main ()
{
long x=0;
int y=0;

for (long i=0; i<65537; i++)
{
for (long j=0; j<3511; j++)
{
x=65337i + 3511j;
if (x=1)
cout <<"i: "<< i << " j: "<< j<< endl;
}
}

return 0;
}

 
Reply With Quote
 
 
 
 
Jim Langston
Guest
Posts: n/a
 
      11-01-2005

<> wrote in message
news: oups.com...
> In my simple program I am getting this error..please help
>
> I am trying to find integers where 65537i + 3551j = 1
>
> error: cannot convert `__complex__ int' to `long int' in
> assignment
>
>
> #include <iostream>
> #include <complex>
> #include <cmath>
>
> using namespace std;
>
> int main ()
> {
> long x=0;
> int y=0;
>
> for (long i=0; i<65537; i++)
> {
> for (long j=0; j<3511; j++)
> {
> x=65337i + 3511j;


What is this? 3511j is not a number. 65537i is probably not a number,
although it might be 65537 as an int.

I think you want x = i + j; here

> if (x=1)
> cout <<"i: "<< i << " j: "<< j<< endl;
> }
> }
>
> return 0;
> }
>



 
Reply With Quote
 
 
 
 
Kai-Uwe Bux
Guest
Posts: n/a
 
      11-01-2005
wrote:

> In my simple program I am getting this error..please help
>
> I am trying to find integers where 65537i + 3551j = 1
>
> error: cannot convert `__complex__ int' to `long int' in
> assignment
>
>
> #include <iostream>
> #include <complex>
> #include <cmath>


ditch the last two headers: you do not use them anyway.

>
> using namespace std;
>
> int main ()
> {
> long x=0;
> int y=0;
>
> for (long i=0; i<65537; i++)
> {
> for (long j=0; j<3511; j++)
> {
> x=65337i + 3511j;


make that:

x= 65337*i + 3511*j;

> if (x=1)


probably you mean:

if ( x == 1 )

> cout <<"i: "<< i << " j: "<< j<< endl;
> }
> }
>
> return 0;
> }


Also:

a) running the corrected program, you might be in for a little surprise. It
will not find any numbers doing the trick: you are arbitrarily restricted
the search space for i and j, and your bounds are way off (note that it
simply cannot work for i and j both positive!).

b) You might consider reading on GCDs and the Euclidean Algorithm. It can be
extended to solve your problem.



Best

Kai-Uwe Bux

 
Reply With Quote
 
toy
Guest
Posts: n/a
 
      11-01-2005
Kai...thanks so much for your advice

why am i restricted? i thought that c++ integers can span a certain
space..along the lines of 2^32..???

i'm familiar with the algorithms, am i required to write my own class
to make this work?

 
Reply With Quote
 
Kai-Uwe Bux
Guest
Posts: n/a
 
      11-01-2005
toy wrote:

> Kai...thanks so much for your advice


It's Kai-Uwe.


> why am i restricted? i thought that c++ integers can span a certain
> space..along the lines of 2^32..???


Please quote what you are refering to. I wrote:

> a) running the corrected program, you might be in for a little surprise.
> It will not find any numbers doing the trick: you are arbitrarily
> restricted the search space for i and j, and your bounds are way off
> (note that it simply cannot work for i and j both positive!).


And this in not even correct English. I should have written:

.... you arbitrarily restricted the search space for i and j, ...


> i'm familiar with the algorithms, am i required to write my own class
> to make this work?


*Which* algorithm? To make *what* work?


Best

Kai-Uwe Bux
 
Reply With Quote
 
toy
Guest
Posts: n/a
 
      11-01-2005
Kai-Uwe, I apologize for abbreviating your name. If I change the search
space for i and j to count downward, (as in i--, j--)..will this work?

or need i write a class or input code to execute the euclidean
algorithm in some form?

 
Reply With Quote
 
toy
Guest
Posts: n/a
 
      11-01-2005
Ok I changed the code to decrement i and j as opposed to
increment...the for loops will also execute until i and j are their
NEGATIVE values.

i still am not generating a solution. can u help?

 
Reply With Quote
 
Kai-Uwe Bux
Guest
Posts: n/a
 
      11-01-2005
toy wrote:

> Ok I changed the code to decrement i and j as opposed to
> increment...the for loops will also execute until i and j are their
> NEGATIVE values.
>
> i still am not generating a solution. can u help?


Sure. Here is a simple version of Euclids algorithm:

#include <iostream>
#include <algorithm>

unsigned long gcd_euclid ( unsigned long a, unsigned long b ) {
if ( b < a ) {
std::swap( a, b );
}
while ( a != 0 ) {
// now b = a*q + r for some q and r. (division with remainder)
unsigned long q = b / a;
unsigned long r = b % a;
std::cout << r << " = " << b << " - " << a << "*" << q << '\n';
b = a;
a = r;
}
return ( b );
}

int main ( void ) {
std::cout <<gcd_euclid( 65537, 3551 ) << '\n';
}

If you run this, you find: the output

1619 = 65537 - 3551*18
313 = 3551 - 1619*2
54 = 1619 - 313*5
43 = 313 - 54*5
11 = 54 - 43*1
10 = 43 - 11*3
1 = 11 - 10*1 <--- important information
0 = 10 - 1*10


The magic of the algorithm is that all these equations are actually true.


Now, you can work backwards:

1 = 11 - 10 * 1;
= 11 - ( 43 - 11 * 3 ) * 1 = 11 * 4 - 43
= ( 54 - 43 ) * 4 - 43 = 54*4 - 43*5
= 54*4 - ( 313 - 54*5) * 5 = 313*(-5) + 54*29
= ...

Another way is working forward:

1619 = 65537 - 3551*18
313 = 3551 - 1619*2 = 3551 - ( 65537-3551*18 ) * 2
= 65537*(-2) + 3551*37
54 = 1619 - 313*5
= ( 65537-3551*18 ) - ( 65537*(-2) + 3551*37 ) * 5
= 65537*someting + 3551*something_else
....
keep going until you get
....
1 = 65537*something + 3551*something_else


These ideas should get you started.

Best

Kai-Uwe Bux
 
Reply With Quote
 
toy
Guest
Posts: n/a
 
      11-01-2005
you are a LIFESAVER

thanks sooo much!

 
Reply With Quote
 
Alf P. Steinbach
Guest
Posts: n/a
 
      11-01-2005
* Kai-Uwe Bux:
>
> [relevant info, gcd]
>
> These ideas should get you started.


Just tell me how you saw what he was trying to do?

Even if it's off-topic.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Simple program with a simple(?) error -- what's wrong? RichardOnRails Ruby 3 07-21-2008 01:26 PM
looking for a simple way to load a program from another python program.. Eric_Dexter@msn.com Python 10 08-15-2006 05:00 AM
Help !I want to write a program to count the running time of another program freehomesp@yahoo.com.cn C Programming 1 08-12-2005 06:13 AM
A few simple problems in a simple program. jmac@berkeley.edu C Programming 7 07-23-2003 09:51 PM
passing data between Java program and C program--help pipi Java 1 07-21-2003 05:02 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57