Question

Guys can you teach me how to use malloc feature in my code..........

Asked by: Sambho

Guys .....greetings...
         
                       My programme to find the prime number below 10000 is ready to go. But I want to use malloc function in my programme to create memory for 10,000 elements of the array.....So guys can you help me how can I do that........
                    Tons of thanks......

/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/
 
#include<stdio.h>
#include <stdlib.h>     /* for the malloc() function and exit() function */
#include <assert.h>     /* for assert macro */
 
int main(int argc, char* argv[])
{
    FILE *fp;
    int num[10000], i, j; 
    
    if (argc != 2) {
 	  printf("Usage: SeiveErat.exe output.txt \n");
 	  exit(1);
    }
               
    fp = fopen(argv[1], "w+");
       
    for(i=1;i<=9999;i++)     
          num[i]=i+1;
     
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)
          {
               for(j=(i+1);j<=9999;j++)
               {
                    if(num[j]!=0)
                    {
                         if((num[j]%num[i])==0)     /*check if num[j]*/ 
                         num[j]=0;                    /*is a multiple of num[i]*/
                                                       /*if it is a multiple then set it to 0*/
                    }
               }
          }
     }
 
     for(i=0;i<=9999;i++)
     {
          if(num[i]!=0)                   /*Print all prime numbers*/
               {
               //printf("\n%d",num[i]);
               fprintf(fp, "%d\r\n", num[i]);
               }
     }
      fclose(fp);
}

                                  
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:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-10-23 at 10:01:01ID24838601
Topics

C Programming Language

,

C++ Programming Language

Participating Experts
3
Points
500
Comments
23

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. malloc failing while there is still plenty of memory
    environment: msvc ++6 win xp 512 MB of ram i'm stress testing my debug build and let it continously malloc memory, however when it get to around >70MB, malloc start crashing in _heap_alloc_base(unsigned int) ?? there is still plenty of memory, nothing else is running in t...
  2. ~~~CODING malloc()~~~
    All Experts, Hi, I'm having an assignmnet on Operating System Class, my task is to create our own malloc function, the interface are extern int mm_init (void); extern void *mm_malloc (size_t size); extern void mm_free (void *ptr); We are not allowed to change the interface a...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: jkrPosted on 2009-10-23 at 10:50:50ID: 25646690

Using 'malloc()' here is quite simple, just change that to

/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/
 
#include<stdio.h>
#include <stdlib.h>     /* for the malloc() function and exit() function */
#include <assert.h>     /* for assert macro */
 
int main(int argc, char* argv[])
{
    FILE *fp;
    int i, j; 
    int* num; // instead of the array
    
    if (argc != 2) {
          printf("Usage: SeiveErat.exe output.txt \n");
          exit(1);
    }
               
    fp = fopen(argv[1], "w+");
 
    num = (int*) malloc(10000 * sizeof(int)); // allocate the memory
       
    for(i=1;i<=9999;i++)     
          num[i]=i+1;
     
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)
          {
               for(j=(i+1);j<=9999;j++)
               {
                    if(num[j]!=0)
                    {
                         if((num[j]%num[i])==0)     /*check if num[j]*/ 
                         num[j]=0;                    /*is a multiple of num[i]*/
                                                       /*if it is a multiple then set it to 0*/
                    }
               }
          }
     }
 
     for(i=0;i<=9999;i++)
     {
          if(num[i]!=0)                   /*Print all prime numbers*/
               {
               //printf("\n%d",num[i]);
               fprintf(fp, "%d\r\n", num[i]);
               }
     }
 
     free(num); // clean up
 
      fclose(fp);
}

                                              
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:

Select allOpen in new window

 

by: jkrPosted on 2009-10-23 at 10:51:30ID: 25646694

BTW, see also http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/ for more information on that issue.

 

by: SambhoPosted on 2009-10-23 at 11:43:52ID: 25647154

Yes thank you
                           It is really simple to use malloc. I also used assert macro just below the malloc function.I think it is correct to use in that way......

   In the output I am getting number  4063608 on the top( before prime number 2). I don't know why I am getting this......

There I want to print something like "There are 1229 prime numbers less than or equal to 10000"
 
Output is attached below.....

4063608
 
2
 
3
 
5
 
7
 
11
 
13
 
17
 
19
 
23
 
29
 
31
 
37
 
41
 
43
 
47
 
53
 
59
 
61
 
67
 
71
 
73
 
79
 
83
 
89
 
97
 
101
 
103
 
107
 
109
 
113
 
127
 
131
 
137
 
139
 
149
 
151
 
157
 
163
 
167
 
173
 
179
 
181
 
191
 
193
 
197
 
199
 
211
 
223
 
227
 
229
 
233
 
239
 
241
 
251
 
257
 
263
 
269
 
271
 
277
 
281
 
283
 
293
 
307
 
311
 
313
 
317
 
331
 
337
 
347
 
349
 
353
 
359
 
367
 
373
 
379
 
383
 
389
 
397
 
401
 
409
 
419
 
421
 
431
 
433
 
439
 
443
 
449
 
457
 
461
 
463
 
467
 
479
 
487
 
491
 
499
 
503
 
509
 
521
 
523
 
541
 
547
 
557
 
563
 
569
 
571
 
577
 
587
 
593
 
599
 
601
 
607
 
613
 
617
 
619
 
631
 
641
 
643
 
647
 
653
 
659
 
661
 
673
 
677
 
683
 
691
 
701
 
709
 
719
 
727
 
733
 
739
 
743
 
751
 
757
 
761
 
769
 
773
 
787
 
797
 
809
 
811
 
821
 
823
 
827
 
829
 
839
 
853
 
857
 
859
 
863
 
877
 
881
 
883
 
887
 
907
 
911
 
919
 
929
 
937

                                              
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:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:

Select allOpen in new window

 

by: jkrPosted on 2009-10-23 at 11:56:02ID: 25647240

In the ourput loop, you start with i = 0 instead of i = 1, thus printing an uninitialized memory area. Use

 
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)                   /*Print all prime numbers*/
               {
               //printf("\n%d",num[i]);
               fprintf(fp, "%d\r\n", num[i]);
               }
     }
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:

Select allOpen in new window

 

by: jkrPosted on 2009-10-23 at 12:03:13ID: 25647307

Oh, alternatively, you could initialize the memory to zero, e.g.

/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/
 
#include<stdio.h>
#include <stdlib.h>     /* for the malloc() function and exit() function */
#include <assert.h>     /* for assert macro */
#include <memory.h>
 
int main(int argc, char* argv[])
{
    FILE *fp;
    int i, j; 
    int* num; // instead of the array
    
    if (argc != 2) {
          printf("Usage: SeiveErat.exe output.txt \n");
          exit(1);
    }
               
    fp = fopen(argv[1], "w+");
 
    num = (int*) malloc(10000 * sizeof(int)); // allocate the memory
 
    memset(num,0,10000 * sizeof(int));
       
    for(i=1;i<=9999;i++)     
          num[i]=i+1;
     
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)
          {
               for(j=(i+1);j<=9999;j++)
               {
                    if(num[j]!=0)
                    {
                         if((num[j]%num[i])==0)     /*check if num[j]*/ 
                         num[j]=0;                    /*is a multiple of num[i]*/
                                                       /*if it is a multiple then set it to 0*/
                    }
               }
          }
     }
 
     for(i=0;i<=9999;i++)
     {
          if(num[i]!=0)                   /*Print all prime numbers*/
               {
               //printf("\n%d",num[i]);
               fprintf(fp, "%d\r\n", num[i]);
               }
     }
 
     free(num); // clean up
 
      fclose(fp);
}
                                              
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:

Select allOpen in new window

 

by: SambhoPosted on 2009-10-23 at 13:14:28ID: 25648114

Thank you JKR very much,,

                 I have one last question for you..............I want to print " There are 1229( what ever it is) prime numbers less than or equal to 10000"
                           So for this I have to use just fprintf...  function but I don't know how to count n[i].......Please tell me how to do that....
                          Thank you very much..........................

 

by: jkrPosted on 2009-10-23 at 13:28:57ID: 25648250

Sure, no problem:

/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/
 
#include<stdio.h>
#include <stdlib.h>     /* for the malloc() function and exit() function */
#include <assert.h>     /* for assert macro */
#include <memory.h>
 
int main(int argc, char* argv[])
{
    FILE *fp;
    int i, j; 
    int* num; // instead of the array
 
    unsigned int count = 0;
    
    if (argc != 2) {
          printf("Usage: SeiveErat.exe output.txt \n");
          exit(1);
    }
               
    fp = fopen(argv[1], "w+");
 
    num = (int*) malloc(10000 * sizeof(int)); // allocate the memory
 
    memset(num,0,10000 * sizeof(int));
       
    for(i=1;i<=9999;i++)     
          num[i]=i+1;
     
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)
          {
               for(j=(i+1);j<=9999;j++)
               {
                    if(num[j]!=0)
                    {
                         if((num[j]%num[i])==0)     /*check if num[j]*/ 
                         num[j]=0;                    /*is a multiple of num[i]*/
                                                       /*if it is a multiple then set it to 0*/
                    }
               }
          }
     }
 
     for(i=0;i<=9999;i++)
     {
          if(num[i]!=0)                   /*Print all prime numbers*/
               {
               //printf("\n%d",num[i]);
               fprintf(fp, "%d\r\n", num[i]);
               ++count; // count prime number
               }
     }
 
 
     fprintf(fp,"There are %u prime numbers less than or equal to 10000\n",count);
 
     free(num); // clean up
 
      fclose(fp);
}
                                              
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:
58:
59:
60:
61:
62:

Select allOpen in new window

 

by: SambhoPosted on 2009-10-23 at 14:16:05ID: 25648731


Hi jkr,
              the out put is wrong it shows very high number...............I have attached the output...Please have a look.

9689
 
9697
 
9719
 
9721
 
9733
 
9739
 
9743
 
9749
 
9767
 
9769
 
9781
 
9787
 
9791
 
9803
 
9811
 
9817
 
9829
 
9833
 
9839
 
9851
 
9857
 
9859
 
9871
 
9883
 
9887
 
9901
 
9907
 
9923
 
9929
 
9931
 
9941
 
9949
 
9967
 
9973
 
There are 2009314170 prime numbers less than or equal to 10000

                                              
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:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:

Select allOpen in new window

 

by: jkrPosted on 2009-10-23 at 14:19:50ID: 25648769

Have you changed anything? The code from above gives me the following output (starting with 2):

2
 
3
 
5
 
7
 
11
 
13
 
17
 
19
 
23
 
29
 
31
 
37
 
41
 
43
 
47
 
53
 
59
 
61
 
67
 
71
 
73
 
79
 
83
 
89
 
97
 
101
 
103
 
107
 
109
 
113
 
127
 
131
 
137
 
139
 
149
 
151
 
157
 
163
 
167
 
173
 
179
 
181
 
191
 
193
 
197
 
199
 
211
 
223
 
227
 
229
 
233
 
239
 
241
 
251
 
257
 
263
 
269
 
271
 
277
 
281
 
283
 
293
 
307
 
311
 
313
 
317
 
331
 
337
 
347
 
349
 
353
 
359
 
367
 
373
 
379
 
383
 
389
 
397
 
401
 
409
 
419
 
421
 
431
 
433
 
439
 
443
 
449
 
457
 
461
 
463
 
467
 
479
 
487
 
491
 
499
 
503
 
509
 
521
 
523
 
541
 
547
 
557
 
563
 
569
 
571
 
577
 
587
 
593
 
599
 
601
 
607
 
613
 
617
 
619
 
631
 
641
 
643
 
647
 
653
 
659
 
661
 
673
 
677
 
683
 
691
 
701
 
709
 
719
 
727
 
733
 
739
 
743
 
751
 
757
 
761
 
769
 
773
 
787
 
797
 
809
 
811
 
821
 
823
 
827
 
829
 
839
 
853
 
857
 
859
 
863
 
877
 
881
 
883
 
887
 
907
 
911
 
919
 
929
 
937
 
941
 
947
 
953
 
967
 
971
 
977
 
983
 
991
 
997
 
1009
 
1013
 
1019
 
1021
 
1031
 
1033
 
1039
 
1049
 
1051
 
1061
 
1063
 
1069
 
1087
 
1091
 
1093
 
1097
 
1103
 
1109
 
1117
 
1123
 
1129
 
1151
 
1153
 
1163
 
1171
 
1181
 
1187
 
1193
 
1201
 
1213
 
1217
 
1223
 
1229
 
1231
 
1237
 
1249
 
1259
 
1277
 
1279
 
1283
 
1289
 
1291
 
1297
 
1301
 
1303
 
1307
 
1319
 
1321
 
1327
 
1361
 
1367
 
1373
 
1381
 
1399
 
1409
 
1423
 
1427
 
1429
 
1433
 
1439
 
1447
 
1451
 
1453
 
1459
 
1471
 
1481
 
1483
 
1487
 
1489
 
1493
 
1499
 
1511
 
1523
 
1531
 
1543
 
1549
 
1553
 
1559
 
1567
 
1571
 
1579
 
1583
 
1597
 
1601
 
1607
 
1609
 
1613
 
1619
 
1621
 
1627
 
1637
 
1657
 
1663
 
1667
 
1669
 
1693
 
1697
 
1699
 
1709
 
1721
 
1723
 
1733
 
1741
 
1747
 
1753
 
1759
 
1777
 
1783
 
1787
 
1789
 
1801
 
1811
 
1823
 
1831
 
1847
 
1861
 
1867
 
1871
 
1873
 
1877
 
1879
 
1889
 
1901
 
1907
 
1913
 
1931
 
1933
 
1949
 
1951
 
1973
 
1979
 
1987
 
1993
 
1997
 
1999
 
2003
 
2011
 
2017
 
2027
 
2029
 
2039
 
2053
 
2063
 
2069
 
2081
 
2083
 
2087
 
2089
 
2099
 
2111
 
2113
 
2129
 
2131
 
2137
 
2141
 
2143
 
2153
 
2161
 
2179
 
2203
 
2207
 
2213
 
2221
 
2237
 
2239
 
2243
 
2251
 
2267
 
2269
 
2273
 
2281
 
2287
 
2293
 
2297
 
2309
 
2311
 
2333
 
2339
 
2341
 
2347
 
2351
 
2357
 
2371
 
2377
 
2381
 
2383
 
2389
 
2393
 
2399
 
2411
 
2417
 
2423
 
2437
 
2441
 
2447
 
2459
 
2467
 
2473
 
2477
 
2503
 
2521
 
2531
 
2539
 
2543
 
2549
 
2551
 
2557
 
2579
 
2591
 
2593
 
2609
 
2617
 
2621
 
2633
 
2647
 
2657
 
2659
 
2663
 
2671
 
2677
 
2683
 
2687
 
2689
 
2693
 
2699
 
2707
 
2711
 
2713
 
2719
 
2729
 
2731
 
2741
 
2749
 
2753
 
2767
 
2777
 
2789
 
2791
 
2797
 
2801
 
2803
 
2819
 
2833
 
2837
 
2843
 
2851
 
2857
 
2861
 
2879
 
2887
 
2897
 
2903
 
2909
 
2917
 
2927
 
2939
 
2953
 
2957
 
2963
 
2969
 
2971
 
2999
 
3001
 
3011
 
3019
 
3023
 
3037
 
3041
 
3049
 
3061
 
3067
 
3079
 
3083
 
3089
 
3109
 
3119
 
3121
 
3137
 
3163
 
3167
 
3169
 
3181
 
3187
 
3191
 
3203
 
3209
 
3217
 
3221
 
3229
 
3251
 
3253
 
3257
 
3259
 
3271
 
3299
 
3301
 
3307
 
3313
 
3319
 
3323
 
3329
 
3331
 
3343
 
3347
 
3359
 
3361
 
3371
 
3373
 
3389
 
3391
 
3407
 
3413
 
3433
 
3449
 
3457
 
3461
 
3463
 
3467
 
3469
 
3491
 
3499
 
3511
 
3517
 
3527
 
3529
 
3533
 
3539
 
3541
 
3547
 
3557
 
3559
 
3571
 
3581
 
3583
 
3593
 
3607
 
3613
 
3617
 
3623
 
3631
 
3637
 
3643
 
3659
 
3671
 
3673
 
3677
 
3691
 
3697
 
3701
 
3709
 
3719
 
3727
 
3733
 
3739
 
3761
 
3767
 
3769
 
3779
 
3793
 
3797
 
3803
 
3821
 
3823
 
3833
 
3847
 
3851
 
3853
 
3863
 
3877
 
3881
 
3889
 
3907
 
3911
 
3917
 
3919
 
3923
 
3929
 
3931
 
3943
 
3947
 
3967
 
3989
 
4001
 
4003
 
4007
 
4013
 
4019
 
4021
 
4027
 
4049
 
4051
 
4057
 
4073
 
4079
 
4091
 
4093
 
4099
 
4111
 
4127
 
4129
 
4133
 
4139
 
4153
 
4157
 
4159
 
4177
 
4201
 
4211
 
4217
 
4219
 
4229
 
4231
 
4241
 
4243
 
4253
 
4259
 
4261
 
4271
 
4273
 
4283
 
4289
 
4297
 
4327
 
4337
 
4339
 
4349
 
4357
 
4363
 
4373
 
4391
 
4397
 
4409
 
4421
 
4423
 
4441
 
4447
 
4451
 
4457
 
4463
 
4481
 
4483
 
4493
 
4507
 
4513
 
4517
 
4519
 
4523
 
4547
 
4549
 
4561
 
4567
 
4583
 
4591
 
4597
 
4603
 
4621
 
4637
 
4639
 
4643
 
4649
 
4651
 
4657
 
4663
 
4673
 
4679
 
4691
 
4703
 
4721
 
4723
 
4729
 
4733
 
4751
 
4759
 
4783
 
4787
 
4789
 
4793
 
4799
 
4801
 
4813
 
4817
 
4831
 
4861
 
4871
 
4877
 
4889
 
4903
 
4909
 
4919
 
4931
 
4933
 
4937
 
4943
 
4951
 
4957
 
4967
 
4969
 
4973
 
4987
 
4993
 
4999
 
5003
 
5009
 
5011
 
5021
 
5023
 
5039
 
5051
 
5059
 
5077
 
5081
 
5087
 
5099
 
5101
 
5107
 
5113
 
5119
 
5147
 
5153
 
5167
 
5171
 
5179
 
5189
 
5197
 
5209
 
5227
 
5231
 
5233
 
5237
 
5261
 
5273
 
5279
 
5281
 
5297
 
5303
 
5309
 
5323
 
5333
 
5347
 
5351
 
5381
 
5387
 
5393
 
5399
 
5407
 
5413
 
5417
 
5419
 
5431
 
5437
 
5441
 
5443
 
5449
 
5471
 
5477
 
5479
 
5483
 
5501
 
5503
 
5507
 
5519
 
5521
 
5527
 
5531
 
5557
 
5563
 
5569
 
5573
 
5581
 
5591
 
5623
 
5639
 
5641
 
5647
 
5651
 
5653
 
5657
 
5659
 
5669
 
5683
 
5689
 
5693
 
5701
 
5711
 
5717
 
5737
 
5741
 
5743
 
5749
 
5779
 
5783
 
5791
 
5801
 
5807
 
5813
 
5821
 
5827
 
5839
 
5843
 
5849
 
5851
 
5857
 
5861
 
5867
 
5869
 
5879
 
5881
 
5897
 
5903
 
5923
 
5927
 
5939
 
5953
 
5981
 
5987
 
6007
 
6011
 
6029
 
6037
 
6043
 
6047
 
6053
 
6067
 
6073
 
6079
 
6089
 
6091
 
6101
 
6113
 
6121
 
6131
 
6133
 
6143
 
6151
 
6163
 
6173
 
6197
 
6199
 
6203
 
6211
 
6217
 
6221
 
6229
 
6247
 
6257
 
6263
 
6269
 
6271
 
6277
 
6287
 
6299
 
6301
 
6311
 
6317
 
6323
 
6329
 
6337
 
6343
 
6353
 
6359
 
6361
 
6367
 
6373
 
6379
 
6389
 
6397
 
6421
 
6427
 
6449
 
6451
 
6469
 
6473
 
6481
 
6491
 
6521
 
6529
 
6547
 
6551
 
6553
 
6563
 
6569
 
6571
 
6577
 
6581
 
6599
 
6607
 
6619
 
6637
 
6653
 
6659
 
6661
 
6673
 
6679
 
6689
 
6691
 
6701
 
6703
 
6709
 
6719
 
6733
 
6737
 
6761
 
6763
 
6779
 
6781
 
6791
 
6793
 
6803
 
6823
 
6827
 
6829
 
6833
 
6841
 
6857
 
6863
 
6869
 
6871
 
6883
 
6899
 
6907
 
6911
 
6917
 
6947
 
6949
 
6959
 
6961
 
6967
 
6971
 
6977
 
6983
 
6991
 
6997
 
7001
 
7013
 
7019
 
7027
 
7039
 
7043
 
7057
 
7069
 
7079
 
7103
 
7109
 
7121
 
7127
 
7129
 
7151
 
7159
 
7177
 
7187
 
7193
 
7207
 
7211
 
7213
 
7219
 
7229
 
7237
 
7243
 
7247
 
7253
 
7283
 
7297
 
7307
 
7309
 
7321
 
7331
 
7333
 
7349
 
7351
 
7369
 
7393
 
7411
 
7417
 
7433
 
7451
 
7457
 
7459
 
7477
 
7481
 
7487
 
7489
 
7499
 
7507
 
7517
 
7523
 
7529
 
7537
 
7541
 
7547
 
7549
 
7559
 
7561
 
7573
 
7577
 
7583
 
7589
 
7591
 
7603
 
7607
 
7621
 
7639
 
7643
 
7649
 
7669
 
7673
 
7681
 
7687
 
7691
 
7699
 
7703
 
7717
 
7723
 
7727
 
7741
 
7753
 
7757
 
7759
 
7789
 
7793
 
7817
 
7823
 
7829
 
7841
 
7853
 
7867
 
7873
 
7877
 
7879
 
7883
 
7901
 
7907
 
7919
 
7927
 
7933
 
7937
 
7949
 
7951
 
7963
 
7993
 
8009
 
8011
 
8017
 
8039
 
8053
 
8059
 
8069
 
8081
 
8087
 
8089
 
8093
 
8101
 
8111
 
8117
 
8123
 
8147
 
8161
 
8167
 
8171
 
8179
 
8191
 
8209
 
8219
 
8221
 
8231
 
8233
 
8237
 
8243
 
8263
 
8269
 
8273
 
8287
 
8291
 
8293
 
8297
 
8311
 
8317
 
8329
 
8353
 
8363
 
8369
 
8377
 
8387
 
8389
 
8419
 
8423
 
8429
 
8431
 
8443
 
8447
 
8461
 
8467
 
8501
 
8513
 
8521
 
8527
 
8537
 
8539
 
8543
 
8563
 
8573
 
8581
 
8597
 
8599
 
8609
 
8623
 
8627
 
8629
 
8641
 
8647
 
8663
 
8669
 
8677
 
8681
 
8689
 
8693
 
8699
 
8707
 
8713
 
8719
 
8731
 
8737
 
8741
 
8747
 
8753
 
8761
 
8779
 
8783
 
8803
 
8807
 
8819
 
8821
 
8831
 
8837
 
8839
 
8849
 
8861
 
8863
 
8867
 
8887
 
8893
 
8923
 
8929
 
8933
 
8941
 
8951
 
8963
 
8969
 
8971
 
8999
 
9001
 
9007
 
9011
 
9013
 
9029
 
9041
 
9043
 
9049
 
9059
 
9067
 
9091
 
9103
 
9109
 
9127
 
9133
 
9137
 
9151
 
9157
 
9161
 
9173
 
9181
 
9187
 
9199
 
9203
 
9209
 
9221
 
9227
 
9239
 
9241
 
9257
 
9277
 
9281
 
9283
 
9293
 
9311
 
9319
 
9323
 
9337
 
9341
 
9343
 
9349
 
9371
 
9377
 
9391
 
9397
 
9403
 
9413
 
9419
 
9421
 
9431
 
9433
 
9437
 
9439
 
9461
 
9463
 
9467
 
9473
 
9479
 
9491
 
9497
 
9511
 
9521
 
9533
 
9539
 
9547
 
9551
 
9587
 
9601
 
9613
 
9619
 
9623
 
9629
 
9631
 
9643
 
9649
 
9661
 
9677
 
9679
 
9689
 
9697
 
9719
 
9721
 
9733
 
9739
 
9743
 
9749
 
9767
 
9769
 
9781
 
9787
 
9791
 
9803
 
9811
 
9817
 
9829
 
9833
 
9839
 
9851
 
9857
 
9859
 
9871
 
9883
 
9887
 
9901
 
9907
 
9923
 
9929
 
9931
 
9941
 
9949
 
9967
 
9973
 
There are 1229 prime numbers less than or equal to 10000
                                              
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:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004:
1005:
1006:
1007:
1008:
1009:
1010:
1011:
1012:
1013:
1014:
1015:
1016:
1017:
1018:
1019:
1020:
1021:
1022:
1023:
1024:
1025:
1026:
1027:
1028:
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052:
1053:
1054:
1055:
1056:
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086:
1087:
1088:
1089:
1090:
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105:
1106:
1107:
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115:
1116:
1117:
1118:
1119:
1120:
1121:
1122:
1123:
1124:
1125:
1126:
1127:
1128:
1129:
1130:
1131:
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149:
1150:
1151:
1152:
1153:
1154:
1155:
1156:
1157:
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173:
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181:
1182:
1183:
1184:
1185:
1186:
1187:
1188:
1189:
1190:
1191:
1192:
1193:
1194:
1195:
1196:
1197:
1198:
1199:
1200:
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214:
1215:
1216:
1217:
1218:
1219:
1220:
1221:
1222:
1223:
1224:
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
1239:
1240:
1241:
1242:
1243:
1244:
1245:
1246:
1247:
1248:
1249:
1250:
1251:
1252:
1253:
1254:
1255:
1256:
1257:
1258:
1259:
1260:
1261:
1262:
1263:
1264:
1265:
1266:
1267:
1268:
1269:
1270:
1271:
1272:
1273:
1274:
1275:
1276:
1277:
1278:
1279:
1280:
1281:
1282:
1283:
1284:
1285:
1286:
1287:
1288:
1289:
1290:
1291:
1292:
1293:
1294:
1295:
1296:
1297:
1298:
1299:
1300:
1301:
1302:
1303:
1304:
1305:
1306:
1307:
1308:
1309:
1310:
1311:
1312:
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333:
1334:
1335:
1336:
1337:
1338:
1339:
1340:
1341:
1342:
1343:
1344:
1345:
1346:
1347:
1348:
1349:
1350:
1351:
1352:
1353:
1354:
1355:
1356:
1357:
1358:
1359:
1360:
1361:
1362:
1363:
1364:
1365:
1366:
1367:
1368:
1369:
1370:
1371:
1372:
1373:
1374:
1375:
1376:
1377:
1378:
1379:
1380:
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396:
1397:
1398:
1399:
1400:
1401:
1402:
1403:
1404:
1405:
1406:
1407:
1408:
1409:
1410:
1411:
1412:
1413:
1414:
1415:
1416:
1417:
1418:
1419:
1420:
1421:
1422:
1423:
1424:
1425:
1426:
1427:
1428:
1429:
1430:
1431:
1432:
1433:
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449:
1450:
1451:
1452:
1453:
1454:
1455:
1456:
1457:
1458:
1459:
1460:
1461:
1462:
1463:
1464:
1465:
1466:
1467:
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565:
1566:
1567:
1568:
1569:
1570:
1571:
1572:
1573:
1574:
1575:
1576:
1577:
1578:
1579:
1580:
1581:
1582:
1583:
1584:
1585:
1586:
1587:
1588:
1589:
1590:
1591:
1592:
1593:
1594:
1595:
1596:
1597:
1598:
1599:
1600:
1601:
1602:
1603:
1604:
1605:
1606:
1607:
1608:
1609:
1610:
1611:
1612:
1613:
1614:
1615:
1616:
1617:
1618:
1619:
1620:
1621:
1622:
1623:
1624:
1625:
1626:
1627:
1628:
1629:
1630:
1631:
1632:
1633:
1634:
1635:
1636:
1637:
1638:
1639:
1640:
1641:
1642:
1643:
1644:
1645:
1646:
1647:
1648:
1649:
1650:
1651:
1652:
1653:
1654:
1655:
1656:
1657:
1658:
1659:
1660:
1661:
1662:
1663:
1664:
1665:
1666:
1667:
1668:
1669:
1670:
1671:
1672:
1673:
1674:
1675:
1676:
1677:
1678:
1679:
1680:
1681:
1682:
1683:
1684:
1685:
1686:
1687:
1688:
1689:
1690:
1691:
1692:
1693:
1694:
1695:
1696:
1697:
1698:
1699:
1700:
1701:
1702:
1703:
1704:
1705:
1706:
1707:
1708:
1709:
1710:
1711:
1712:
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739:
1740:
1741:
1742:
1743:
1744:
1745:
1746:
1747:
1748:
1749:
1750:
1751:
1752:
1753:
1754:
1755:
1756:
1757:
1758:
1759:
1760:
1761:
1762:
1763:
1764:
1765:
1766:
1767:
1768:
1769:
1770:
1771:
1772:
1773:
1774:
1775:
1776:
1777:
1778:
1779:
1780:
1781:
1782:
1783:
1784:
1785:
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797:
1798:
1799:
1800:
1801:
1802:
1803:
1804:
1805:
1806:
1807:
1808:
1809:
1810:
1811:
1812:
1813:
1814:
1815:
1816:
1817:
1818:
1819:
1820:
1821:
1822:
1823:
1824:
1825:
1826:
1827:
1828:
1829:
1830:
1831:
1832:
1833:
1834:
1835:
1836:
1837:
1838:
1839:
1840:
1841:
1842:
1843:
1844:
1845:
1846:
1847:
1848:
1849:
1850:
1851:
1852:
1853:
1854:
1855:
1856:
1857:
1858:
1859:
1860:
1861:
1862:
1863:
1864:
1865:
1866:
1867:
1868:
1869:
1870:
1871:
1872:
1873:
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885:
1886:
1887:
1888:
1889:
1890:
1891:
1892:
1893:
1894:
1895:
1896:
1897:
1898:
1899:
1900:
1901:
1902:
1903:
1904:
1905:
1906:
1907:
1908:
1909:
1910:
1911:
1912:
1913:
1914:
1915:
1916:
1917:
1918:
1919:
1920:
1921:
1922:
1923:
1924:
1925:
1926:
1927:
1928:
1929:
1930:
1931:
1932:
1933:
1934:
1935:
1936:
1937:
1938:
1939:
1940:
1941:
1942:
1943:
1944:
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971:
1972:
1973:
1974:
1975:
1976:
1977:
1978:
1979:
1980:
1981:
1982:
1983:
1984:
1985:
1986:
1987:
1988:
1989:
1990:
1991:
1992:
1993:
1994:
1995:
1996:
1997:
1998:
1999:
2000:
2001:
2002:
2003:
2004:
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012:
2013:
2014:
2015:
2016:
2017:
2018:
2019:
2020:
2021:
2022:
2023:
2024:
2025:
2026:
2027:
2028:
2029:
2030:
2031:
2032:
2033:
2034:
2035:
2036:
2037:
2038:
2039:
2040:
2041:
2042:
2043:
2044:
2045:
2046:
2047:
2048:
2049:
2050:
2051:
2052:
2053:
2054:
2055:
2056:
2057:
2058:
2059:
2060:
2061:
2062:
2063:
2064:
2065:
2066:
2067:
2068:
2069:
2070:
2071:
2072:
2073:
2074:
2075:
2076:
2077:
2078:
2079:
2080:
2081:
2082:
2083:
2084:
2085:
2086:
2087:
2088:
2089:
2090:
2091:
2092:
2093:
2094:
2095:
2096:
2097:
2098:
2099:
2100:
2101:
2102:
2103:
2104:
2105:
2106:
2107:
2108:
2109:
2110:
2111:
2112:
2113:
2114:
2115:
2116:
2117:
2118:
2119:
2120:
2121:
2122:
2123:
2124:
2125:
2126:
2127:
2128:
2129:
2130:
2131:
2132:
2133:
2134:
2135:
2136:
2137:
2138:
2139:
2140:
2141:
2142:
2143:
2144:
2145:
2146:
2147:
2148:
2149:
2150:
2151:
2152:
2153:
2154:
2155:
2156:
2157:
2158:
2159:
2160:
2161:
2162:
2163:
2164:
2165:
2166:
2167:
2168:
2169:
2170:
2171:
2172:
2173:
2174:
2175:
2176:
2177:
2178:
2179:
2180:
2181:
2182:
2183:
2184:
2185:
2186:
2187:
2188:
2189:
2190:
2191:
2192:
2193:
2194:
2195:
2196:
2197:
2198:
2199:
2200:
2201:
2202:
2203:
2204:
2205:
2206:
2207:
2208:
2209:
2210:
2211:
2212:
2213:
2214:
2215:
2216:
2217:
2218:
2219:
2220:
2221:
2222:
2223:
2224:
2225:
2226:
2227:
2228:
2229:
2230:
2231:
2232:
2233:
2234:
2235:
2236:
2237:
2238:
2239:
2240:
2241:
2242:
2243:
2244:
2245:
2246:
2247:
2248:
2249:
2250:
2251:
2252:
2253:
2254:
2255:
2256:
2257:
2258:
2259:
2260:
2261:
2262:
2263:
2264:
2265:
2266:
2267:
2268:
2269:
2270:
2271:
2272:
2273:
2274:
2275:
2276:
2277:
2278:
2279:
2280:
2281:
2282:
2283:
2284:
2285:
2286:
2287:
2288:
2289:
2290:
2291:
2292:
2293:
2294:
2295:
2296:
2297:
2298:
2299:
2300:
2301:
2302:
2303:
2304:
2305:
2306:
2307:
2308:
2309:
2310:
2311:
2312:
2313:
2314:
2315:
2316:
2317:
2318:
2319:
2320:
2321:
2322:
2323:
2324:
2325:
2326:
2327:
2328:
2329:
2330:
2331:
2332:
2333:
2334:
2335:
2336:
2337:
2338:
2339:
2340:
2341:
2342:
2343:
2344:
2345:
2346:
2347:
2348:
2349:
2350:
2351:
2352:
2353:
2354:
2355:
2356:
2357:
2358:
2359:
2360:
2361:
2362:
2363:
2364:
2365:
2366:
2367:
2368:
2369:
2370:
2371:
2372:
2373:
2374:
2375:
2376:
2377:
2378:
2379:
2380:
2381:
2382:
2383:
2384:
2385:
2386:
2387:
2388:
2389:
2390:
2391:
2392:
2393:
2394:
2395:
2396:
2397:
2398:
2399:
2400:
2401:
2402:
2403:
2404:
2405:
2406:
2407:
2408:
2409:
2410:
2411:
2412:
2413:
2414:
2415:
2416:
2417:
2418:
2419:
2420:
2421:
2422:
2423:
2424:
2425:
2426:
2427:
2428:
2429:
2430:
2431:
2432:
2433:
2434:
2435:
2436:
2437:
2438:
2439:
2440:
2441:
2442:
2443:
2444:
2445:
2446:
2447:
2448:
2449:
2450:
2451:
2452:
2453:
2454:
2455:
2456:
2457:
2458:
2459:

Select allOpen in new window

 

by: Subrat2009Posted on 2009-10-23 at 15:42:20ID: 25649392


You can replace these two lines with a single statement using calloc() as follows.Calloc initializes memory with value 0.
>>num = (int*) malloc(10000 * sizeof(int)); // allocate the memory

>>    memset(num,0,10000 * sizeof(int));
num = (int*) calloc(10000, sizeof(int));

>>the out put is wrong it shows very high number...............
This prog given by JKR is correct. I think u r getting garbage due to some changes in the code. Can u provide the exact code that produces this unexpected result!

 

by: SambhoPosted on 2009-10-23 at 16:25:49ID: 25649739


Thanks guys for your support and help....................

The exact code is given below. In my programme I have used i = 1 instead of i = 0 in the outer loop instead of using memset .....................It produces wrong output in my case.................

/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/
 
#include<stdio.h>
#include <stdlib.h>     /* for the malloc() function and exit() function */
#include <assert.h>     /* for assert macro */
 
int main(int argc, char* argv[])
{
    FILE *fp;
    int i, j, count; 
    int* num; // instead of the array
    
    if (argc != 2) {
          printf("Usage: SeiveErat.exe output.txt \n");
          exit(1);
    }
               
    fp = fopen(argv[1], "w+");
 
    num = (int*) malloc(10000 * sizeof(int)); // allocate the memory
    assert(num != NULL);   
    
    for(i=1;i<=9999;i++)     
          num[i]=i+1;
     
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)
          {
               for(j=(i+1);j<=9999;j++)
               {
                    if(num[j]!=0)
                    {
                         if((num[j]%num[i])==0)     /*check if num[j]*/ 
                         num[j]=0;                    /*is a multiple of num[i]*/
                                                       /*if it is a multiple then set it to 0*/
                    }
               }
          }
     }
 
     for(i=1;i<=9999;i++)
     {
          if(num[i]!=0)                   /*Print all prime numbers*/
               {
               //printf("\n%d",num[i]);
               
               fprintf(fp, "%d\r\n", num[i]);
               ++count; // count prime number
               }
     }
     fprintf(fp,"There are %u prime numbers less than or equal to 10000\n",count);
     
     free(num); // clean up
 
     fclose(fp);
}
                                              
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:

Select allOpen in new window

 

by: jkrPosted on 2009-10-23 at 16:31:38ID: 25649777

You forgot to set 'count' to '0', make that

    int i, j, count = 0;

 

by: SambhoPosted on 2009-10-23 at 17:15:53ID: 25650037

Thank you very much jkr,
                         Here is probably last help i want from you...  I want to make some modification to my code......I want to use command line arguments to pass the filename and the number.  Such as
  SeiveErat.exe  10000  Output.txt

I think we have to use something like atoi() to convert 10000 to int.
              I don't know how to use the function atoi() in our programme.........
Can you tell me how to do this...........what should we add in our programme...........

                             Thank you very much in advance..................

 

by: InternalStaticPosted on 2009-10-23 at 17:50:16ID: 25650157

It doesn't make a functional difference, but (though I'm not big with C) I believe allocating memory like this is supposed to be done using "calloc" instead of "malloc". They are functionally identical, but using one over the other shows your intent in a program, which is valuable in any language. calloc's signature is as follows:
 
void* calloc(size_t numElements, size_t elementSize);
 
So you would put the following where you currently call malloc:
 
calloc(10000, sizeof(int))
 
Also, your algorithm is using much more memory than is needed (unless I am misunderstanding your intent). It looks to me like you want to output every prime number between 2 and 10,000, and you also want to output how many of these numbers there are. Again, I'm not big with C, but this is much more efficient (I'm gunna hate myself for this, 'cuz this totally sounds like a homework assignment, but here goes anyway...)

Hope this helps,
Nate

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory.h>
 
int main(int argc, char* argv[])
{
	FILE *fp;	 // Output file handle
    int i;		 // Outer for loop counter
	int j;		 // Inner for loop counter
    int* primes; // Prime numbers
	int upperBound; // The number to stop at
	unsigned int countPrimes; // Number of primes
 
	if (argc != 3)
	{
		printf("Usage: SeiveErat.exe num output.txt\n");
		exit(1); // Bail; improper arguments
	}
 
	upperBound = atoi(argv[1]);
	if(upperBound == 0)
	{
		// Parse failed, or the user entered 0 (in which case, there are no primes)
		// Decide how you want to deal with this.
	}
 
	// Set default values.
	countPrimes = 0U;
 
	// Allocate enough for half of the upper bound because any number even number isn't prime,
	// and half of any consecutive set of numbers are always even
	primes = (int*)(calloc(upperBound / 2, sizeof(int)));
 
 
	// Open the specified file with write access. Ideally, you should check to make sure a legitimate path was specified.
	fp = fopen(argv[2], "w+");
 
	// Pre-store/write as many as you want. I would keep it small like this, as more will clutter your code.
	fprintf(fp, "%d\r\n", primes[countPrimes++] = 1);
	fprintf(fp, "%d\r\n", primes[countPrimes++] = 3);
 
	for(i = primes[countPrimes - 1]; i < upperBound; /*Update in loop*/)
	{
		// Start at 3 because if only even numbers are divisible by 2, which we are skipping (above)
		for(j = 3; j < i; j++)
		{
			// Skip over adding the value to the 'array'
			if((i % j) == 0)
			{ goto breakloop; }
		}
		// You can do this entire "application" without storing all the primes at all, if you want.
		// Just remove all references to "primes", and replace "primes[countPrimes++] = i" (below) with just "i"
		fprintf(fp, "%d\r\n", primes[countPrimes++] = i);
	breakloop:
		// Increment by two because even numbers can't be prime (make sure i is equal to an odd number, though, first)
		i += 2;
	}
 
	fprintf(fp, "\r\n\r\nTotal prime numbers inclusively between 1 and %u: %u", upperBound, countPrimes); // Output results
 
	fclose(fp);   // Always release external resources first (e.g. database connections, file handles, etc)
	free(primes); // Deallocate your primes, if you no longer need them
 
	printf("Output finished\n");
	return 0;
}

                                              
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:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:

Select allOpen in new window

 

by: InternalStaticPosted on 2009-10-23 at 17:53:04ID: 25650166

Whoops, forgot to mention I included the parsing for you, too. Hope it's in the format you're looking for.

Also, the word you are spelling as "programme" is spelt "program".

 

by: SambhoPosted on 2009-10-23 at 18:49:20ID: 25650371

Thank you Internalstatic,
                                          I appreciate your help and support. I am not like you, I am just a beginner in this world. SO, I don't care about how much memory my programme is eating. I am learning and  using all differnt kind of things.  And your programme is different then mine.
                                        So, can you please update my own programme or code..........In that way it will be way to much easier for me to know whats going on in my programme...........
                                   By the way what do you mean by "countPrimes = 0U;" What is 0U..
Thank you very much......  

 

by: Subrat2009Posted on 2009-10-23 at 21:08:57ID: 25650740

Unsigned is repesented by U. Like 0U.

Here const is represented by unsigned bcz, we know count shoul only hold +ve vaue rather nagative and it's expcted here.

So instead of chosing signed int we use unsigned int.  Signed holds + & -ve values.

 

by: InternalStaticPosted on 2009-10-23 at 21:28:08ID: 25650807

As Subrat2009 said, the "U" after the number tells the compiler that the number it follows is unsigned (in other words, that the number within it cannot be negative). As I've expressed in a previous post, the point of the "U" suffix is to express intent, while it offers no real functionality in this context (you'll start to see when these things matter as your knowledge progresses). Its use is only valid after a literal numeric constant.

By the way, is this little project a homework assignment, or are you teaching yourself the C language?

 

by: Subrat2009Posted on 2009-10-23 at 21:40:26ID: 25650841

// Plz read the comments carefully by which u can be cleared that why something is used!
/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/

#include<stdio.h>
#include <stdlib.h> /* for the malloc() function and exit() function */
#include <assert.h> /* for assert macro */

int main(int argc, char* argv[])
{
FILE *fp = NULL;//Better try to initialize all variables
int i = 0, j = 0, count = 0;
// better use unsigned count = 0U;
int* num = NULL; // instead of the array.
//Better try to initialize all variables

if (argc != 3) {
printf("Usage: SeiveErat.exe upperbound output.txt \n");
exit(1);
}

fp = fopen(argv[2], "w+"); // change this to 2 bcz argv[1] holds upperbound like 10000.So argv[2] will hold filename.argv[0] holds executable name.
int upperBound = atoi(argv[1]);
//num = (int*) malloc(upperBound * sizeof(int)); // allocate the memory
// Use calloc() here . Already told why in the same thread. Else use memset() as described by jkr which initializes the memory
// Please use calloc() bcz it initializes the memory.But malloc dosn't do that , it only allocates memory and allocated memory will hold garbage values. Which is unsafe.As u r in beginning level, u should check urself in these regards to become a very good programmer in future.
// Use num = (int*) calloc(upperBound, sizeof(int));
num = (int*) calloc(upperBound, sizeof(int));
assert(num != NULL);

for(i=1;i<=upperBound-1;i++)
num[i]=i+1;

for(i=1;i<=upperBound-1;i++)
{
if(num[i]!=0)
{
for(j=(i+1);j<=upperBound-1;j++)
{
if(num[j]!=0)
{
if((num[j]%num[i])==0) /*check if num[j]*/
num[j]=0; /*is a multiple of num[i]*/
/*if it is a multiple then set it to 0*/
}
}
}
}

for(i=1;i<=upperBound-1;i++)
{
if(num[i]!=0) /*Print all prime numbers*/
{
//printf("\n%d",num[i]);

fprintf(fp, "%d\r\n", num[i]);
++count; // count prime number
}
}
fprintf(fp,"There are %u prime numbers less than or equal to %d\n", count, upperBound);

free(num); // clean up

fclose(fp);
}

 

by: SambhoPosted on 2009-10-23 at 21:50:56ID: 25650862


First of all guys thanks for your help,
                                                          This is not homework assignment, I am teaching myself C and I ask you guys  exact  questions and problems from books.  And I want to do exactly what is said in books.
                                                     This is how I am learning......

I have one question again...................
                                          In the end of my output page it says," There are 1229 prime numbers less than or equal to 10000" ................I want to put that message in the begening of the page  i,e before the prime number starts..
         
                    Guys give me some solid idea please ................................Code is attached...

/* Finding Prime Numbers Using The Sieve Of Eratosthenes*/
 
#include <stdio.h>       /* standard header file */
#include <stdlib.h>     /* for the malloc() function and exit() function */
#include <assert.h>    /* for assert macro */
 
 
void get_primes( int *, int);
 
int main(int argc, char* argv[])
{
     FILE *fp;
     int i, count = 0; 
     int *num; 
     int upbound = 10000;
    
    
    if (argc != 3) {
           printf("Usage: SeiveErat.exe 10000 output.txt \n");
           exit(1);
     }
     
   	 upbound = atoi(argv[1]);          
     fp = fopen(argv[2], "w+");
 
     num = (int*) malloc(10000 * sizeof(int)); // allocating the memory
     assert(num != NULL);
       
     get_primes(num, upbound);
                   
     for(i=1; i<upbound; i++)
     {
          if(num[i]!=0)                   
               {
               fprintf(fp, "%d\r\n", num[i]);
               ++count; // count prime number
               }
     }
     fprintf(fp,"There are %u prime numbers less than or equal to 10000\n",count);
     
     free(num); // To clean up 
     
     fclose(fp);
}
 
 
   void get_primes( int *num, int upbound){
     
      int i, j;
 
      for(i=1; i<upbound; i++)     
          num[i]=i+1;
     
      for(i=1; i<upbound; i++)
     {
          if(num[i]!=0)
          {
               for(j=(i+1); j<upbound; j++)
               {
                    if(num[j]!=0)
                    {
                         if((num[j]%num[i])==0)     
                         num[j]=0;                    
                                                       
                    }
               }
          }
     }
}
                                              
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:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:

Select allOpen in new window

 

by: InternalStaticPosted on 2009-10-23 at 22:10:43ID: 25650890

I would love to help, but I think this question is quite exhausted. Us feeding you code like this really isn't getting you anywhere--you need to learn how to think like a programmer. Syntax is nothing--hell, I've never written a program in straight C before today, and it took me all of about 15 minutes to figure it out.

When you find a book to read, do not skip anything. If you think you know whatever it is you're reading about, assume you're wrong, because you probably are. If you've done some skipping around on your current book, I suggest you start over. Open up notepad, and start putting bulleted notes about things that don't make sense to you (maybe your first entry should include the "U" suffix I mentioned? If you're not familiar with the difference between "signed" and "unsigned", it's time you discovered Bing.com)

Lastly, I strongly suggest you put your learning of C on hold and take up another, very similar language (called C++). Their syntax is remarkably similar, however, they are fundamentally different. C is what we call a procedural language, whereas C++ is an object-oriented or object-based language. Object-oriented languages are quickly becoming the standard, so if you don't have a set-in-stone reason to learn C, I recommend you move on over to C++ instead. However, there is one more language I would recommend, also syntactically similar to C and C++: The language C#.

C# is another object-oriented language, but it's a little different. The language relies on another "platform" (known as the .NET Framework--perhaps you've heard of it). The advantage of this fact is that the .NET Framework offers unsurpassed code documentation, naming consistency, and the world's truly best IDE (Integrated Development Environment), known as Microsoft's Visual Studio. The disadvantage in using a .NET language (eg C#) is there is a somewhat large performance penatly, though it is rarely noticed anymore, with 2GB of RAM being as cheap as a candy bar. This is still no excuse for poor coding, however.

I apologize for this post be a rather "personal" and "targeted" one (not very useful for the knowledgebase in most cases, I'm afraid), but I hope it will at least get you thinking. If you'd like to continue this conversation, you may e-mail me at InternalStatic@live.com, as I'd rather not clog this question up any more than I already have.

- Nate

 

by: Subrat2009Posted on 2009-10-23 at 23:15:38ID: 25651035

You can use fseek() to achieve your goal...

 

by: SambhoPosted on 2009-10-24 at 19:38:11ID: 25655299


Oh I am sorry guys for being late...............

            I want to conclude this discussion right here. Thank you for everything..................

                      I am hoping for same kind of help in the future..............

                                              Thank you............

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...