By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,382 Members | 1,567 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,382 IT Pros & Developers. It's quick & easy.

Simple simple program error...please help

P: n/a
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;
}

Nov 1 '05 #1
Share this Question
Share on Google+
14 Replies


P: n/a

<ta******@gmail.com> wrote in message
news:11**********************@z14g2000cwz.googlegr 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;
}

Nov 1 '05 #2

P: n/a
ta******@gmail.com 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

Nov 1 '05 #3

P: n/a
toy
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?

Nov 1 '05 #4

P: n/a
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
Nov 1 '05 #5

P: n/a
toy
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?

Nov 1 '05 #6

P: n/a
toy
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?

Nov 1 '05 #7

P: n/a
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
Nov 1 '05 #8

P: n/a
toy
you are a LIFESAVER

thanks sooo much!

Nov 1 '05 #9

P: n/a
* 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?
Nov 1 '05 #10

P: n/a
toy
@alf what do you mean?

I understood because I have prior knowledge and familiarity with
Euclid's algorithm..and his explanation was very clear and concise.

why do you ask?

Nov 1 '05 #11

P: n/a
Neo
"toy" <ta******@gmail.com> wrote in
news:11*********************@o13g2000cwo.googlegro ups.com:



Euclid's Algo?? Which one.?
Neo

--
Nov 1 '05 #12

P: n/a
Alf P. Steinbach wrote:
* 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.


Easy: the following line from the original post gives it away:

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

What follows is code that clearly tries a brute force attack to find i and
j. After fixing, the relevant portion looks like so:

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

}}

Best

Kai-Uwe Bux
Nov 1 '05 #13

P: n/a

Kai-Uwe Bux wrote:
Alf P. Steinbach wrote:
* 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.


Easy: the following line from the original post gives it away:

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

What follows is code that clearly tries a brute force attack to find i and
j. After fixing, the relevant portion looks like so:

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

}}


Don't you think he should include some negative integers as well, or he
might waste computer resources for nothing.

hint: neither (0,1) nor (1,0) doesn't work, so...

Nov 1 '05 #14

P: n/a
toy wrote:

@alf what do you mean?

I understood because I have prior knowledge and familiarity with
Euclid's algorithm..and his explanation was very clear and concise.

why do you ask?


I guess because this looks like a homework assignment in basic
loop handling. And for that, a teacher is not happy with a solution
based on euclids algorithm (probably because a newbie is not able
to write one on his own).

--
Karl Heinz Buchegger
kb******@gascad.at
Nov 2 '05 #15

This discussion thread is closed

Replies have been disabled for this discussion.