[SOLVED] Finding Prime numbers between l and u.

  • (2 Pages)
  • +
  • 1
  • 2

16 Replies - 1078 Views - Last Post: 28 August 2013 - 05:49 PM Rate Topic: -----

#1 thorax232  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 94
  • Joined: 10-September 12

[SOLVED] Finding Prime numbers between l and u.

Posted 27 August 2013 - 06:55 PM

I am brand spankin' new to C but am familiar with Java, I'm trying to write a program that finds all the prime numbers between the two numbers that a user enters, here is my code:

#include<stdio.h>
#include<math.h>
 
int main()
{
   int l, u, i;
 
   printf("Enter the two numbers l and u:\n");
   scanf("%d %d", &l, &u);
 
   for(i = l; i <= u; i++)
	{
			isPrime(i, u);
	}
 
   return 0;
}

int isPrime(int num, int u)
{
	long root = sqrt(u);
	int i;
	
	for(i = 2; i <= root; i++)
	{
		if(num % i == 0)
			break;
	}
	printf(num + " ");
}


Here are the results:
Attached Image

This post has been edited by thorax232: 28 August 2013 - 11:37 AM


Is This A Good Question/Topic? 0
  • +

Replies To: [SOLVED] Finding Prime numbers between l and u.

#2 #define  Icon User is offline

  • Duke of Err
  • member icon

Reputation: 1335
  • View blog
  • Posts: 4,575
  • Joined: 19-February 09

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 27 August 2013 - 08:02 PM

Hi, with printf the first parameter is a format string which can format the remaining parameters.

29	    printf(num + " ");



should be like
29	    printf("%d ", num);




printf
Was This Post Helpful? 1
  • +
  • -

#3 temp_0001  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 31
  • Joined: 25-August 13

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 27 August 2013 - 08:19 PM

int isPrime(int lo, int hi)
{
     long root = (long) sqrt(hi);
     int i;

     for(i=2; i < root; i++)
     {
          if(lo % i == 0)
             return 0;
     }

     return 1;
}



//before your for loop
int r;
printf("Prime Numbers between %d and %d\n", l, u);
// in your for loop
r = isPrime(i, u);
if(r == 1)
    printf("\t%d\n", i);


Was This Post Helpful? 0
  • +
  • -

#4 temp_0001  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 31
  • Joined: 25-August 13

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 27 August 2013 - 10:20 PM

how was my post not helpful?
Was This Post Helpful? 1
  • +
  • -

#5 Skydiver  Icon User is offline

  • Code herder
  • member icon

Reputation: 3553
  • View blog
  • Posts: 11,014
  • Joined: 05-May 12

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 27 August 2013 - 10:59 PM

Your poorly named variable lo makes things more confusing rather than clearer.

And to make matters worse, your code now incorrectly identifies the number 9 as a prime number if the user enters 8 for L, and 10 for U.
Was This Post Helpful? 0
  • +
  • -

#6 vividexstance  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 656
  • View blog
  • Posts: 2,247
  • Joined: 31-December 10

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 07:54 AM

View Posttemp_0001, on 28 August 2013 - 01:20 AM, said:

how was my post not helpful?

You should also read the rules about just posting code to answer people's questions. Especially without any comments or explanation to go with it.
Was This Post Helpful? 0
  • +
  • -

#7 thorax232  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 94
  • Joined: 10-September 12

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 09:30 AM

Well it did help, "lo" problems aside, I just named that num. Also I found that when you use the square root with a variable sqrt(variable), you have to compile with -lm so it was like gcc -lm prime.c.

Anyways, thanks temp_0001, I'm up and running now!

This post has been edited by thorax232: 28 August 2013 - 09:31 AM

Was This Post Helpful? 0
  • +
  • -

#8 vividexstance  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 656
  • View blog
  • Posts: 2,247
  • Joined: 31-December 10

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 09:41 AM

View Postthorax232, on 28 August 2013 - 12:30 PM, said:

Well it did help, "lo" problems aside, I just named that num. Also I found that when you use the square root with a variable sqrt(variable), you have to compile with -lm so it was like gcc -lm prime.c.

Anyways, thanks temp_0001, I'm up and running now!

Did you not read what Skydiver said about his code?

*EDIT*:
If you didn't read it, then here's the relevant part:

Quote

And to make matters worse, your code now incorrectly identifies the number 9 as a prime number if the user enters 8 for L, and 10 for U.

This post has been edited by vividexstance: 28 August 2013 - 09:41 AM

Was This Post Helpful? 0
  • +
  • -

#9 vividexstance  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 656
  • View blog
  • Posts: 2,247
  • Joined: 31-December 10

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 11:32 AM

And that post wasn't helpful because?
Was This Post Helpful? 0
  • +
  • -

#10 thorax232  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 94
  • Joined: 10-September 12

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 11:32 AM

View Postvividexstance, on 28 August 2013 - 09:41 AM, said:

Did you not read what Skydiver said about his code?


This isn't happening in my code, I thank you for your concern but watch the language you use. This comes across as condescending.

Here's my final code, if you want to run it and check it I would appreciate that, it's up to you.
#include<stdio.h>
#include<math.h>
 
int isPrime(int, int);

int main()
{
   int l, u, i, count;
 
   printf("Enter the two numbers l and u:\n");
   scanf("%d %d", &l, &u);
 
   int r;
   count = 0;
   for(i = l; i <= u; i++)
	{
		r = isPrime(i, u);
		if(r == 1)
		{
			printf("%4d", i);
			count++;
		}

		if(count == 10)
		{
			printf("\n");
			count = 0;
		}
	}
	
   printf("\n");
   return 0;
}

int isPrime(int num, int hi)
{
	long root = sqrt(hi);
	int i;
	
	for(i = 2; i <= root; i++)
	{
		if(num % i == 0)
			return 0;
	}
	return 1;
}

Was This Post Helpful? 1
  • +
  • -

#11 vividexstance  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 656
  • View blog
  • Posts: 2,247
  • Joined: 31-December 10

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 11:34 AM

View Postthorax232, on 28 August 2013 - 02:32 PM, said:

View Postvividexstance, on 28 August 2013 - 09:41 AM, said:

Did you not read what Skydiver said about his code?

This isn't happening in my code, I thank you for your concern but watch the language you use. This comes across as condescending.

That was a simple question, based on the other post you made it seemed like you just took temp_0001's code, I was just making sure you saw what Skydiver had posted.
Was This Post Helpful? 0
  • +
  • -

#12 thorax232  Icon User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 94
  • Joined: 10-September 12

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 11:36 AM

View Postvividexstance, on 28 August 2013 - 11:34 AM, said:

That was a simple question, based on the other post you made it seemed like you just took temp_0001's code, I was just making sure you saw what Skydiver had posted.


Yes I can read and it'd be nice if you leave that up to me. Also not playing the -1 game because you don't like something isn't funny. Conversation over. Thanks for the help.
Was This Post Helpful? 0
  • +
  • -

#13 vividexstance  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 656
  • View blog
  • Posts: 2,247
  • Joined: 31-December 10

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 11:40 AM

View Postthorax232, on 28 August 2013 - 02:36 PM, said:

View Postvividexstance, on 28 August 2013 - 11:34 AM, said:

That was a simple question, based on the other post you made it seemed like you just took temp_0001's code, I was just making sure you saw what Skydiver had posted.


Yes I can read and it'd be nice if you leave that up to me. Also not playing the -1 game because you don't like something isn't funny. Conversation over. Thanks for the help.

I don't like people abusing the rep system. Especially people who have been here as long as you.
Was This Post Helpful? 0
  • +
  • -

#14 temp_0001  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 31
  • Joined: 25-August 13

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 01:49 PM

I'm sorry I posted the code the way I did. I usually don't comment obvious statements, but I forgot that I was typing for a newbie. My code has an off-by-one error in the loop. "<" should be "<=".

I forgot to tell you that it needs to be linked with "-lm", but you got it.

Posted Image
Was This Post Helpful? 0
  • +
  • -

#15 temp_0001  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 31
  • Joined: 25-August 13

Re: [SOLVED] Finding Prime numbers between l and u.

Posted 28 August 2013 - 02:24 PM

there is somethibg wrong with the for loop. numbers shouldn't be modulused by themselves as that would return a wrong answer, so the following code will prevent the number from modulusing to itself.

for(i  = 2; i <= root && i < num; i++)



the && (and) will make sure that the "i <= root" and "i < num" are true before the loop is entered. i used 1 and 100 as my input for the original code. then i used printf calls (calls are when a program uses a function) to debug the code to see what is going on.

printf("\n[debug]\n");
for(i = 2; i <= root; i++)
{
     printf("\t[%d] % [%d] == [%d]\n", num, i, num % i);
// rest of code
// \t is a c escape chracter that means it will display a tab



i believe the fix should solve the problem mentioned.
Was This Post Helpful? 1
  • +
  • -

  • (2 Pages)
  • +
  • 1
  • 2