<ÌäÂê> N (1000°Ê²¼¤ÎN) ¤Þ¤Ç¤ÎÁÇ¿ô¤òµá¤á¤è
<¼Â¹Ô·ë²Ì>¡¡
N : 50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
<¥Ò¥ó¥È>
²òÅúÎã #include <stdio.h> #include <math.h> #define N 50 // ¥×¥í¥°¥é¥àÃæ¤ÎN¤È¤¤¤¦Ê¸»ú¤ò¤ª¤¤«¤¨ void sieve (int n, int p[]); /* °ú¿ô¤ÏÇÛÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹ */ int main (void) { int p[N+1]; int i,j; /* ¡ p[2] - p[N]¤ò£±¤Ë½é´ü²½ */ for(i = 2; i < N+1; i++) p[i]=1; /* ¢ ¥¨¥é¥È¥¹¥Æ¥Í¥¹¤Î¤Õ¤ë¤¤¡£³Æ¼«¡¢³Îǧ */ sieve (N, p); /* ÇÛÎó¤Î¥¢¥É¥ì¥¹ */ /* £ Ãͤ¬1¤Î¤â¤Î¤Ï¡¢ÁÇ¿ô */ printf("N : %d \n", N); for(i = 2; i <= N; i++) if(p[i]==1) printf("%3d", i); printf("\n"); return 0; } void sieve (int n, int p[]) { int i, j; /* n¤ÏÀ°¿ô¡£¼Â¿ô·¿¤Ø¥¥ã¥¹¥È¡Ê·¿ÊÑ´¹¡Ë¤·¤ÆÊ¿Êýº¬¡£ ¤µ¤é¤Ë¡¢int¤Ë·¿ÊÑ´¹¤µ¤ì¤ë¡£¾®¿ôÅÀ°Ê²¼¤¬ÀÚ¤ê¼Î¤Æ¤Ë¤Ê¤ë¤Î¤Ç <= ¡£ ¾ò·ïÉô¤Ëi*i < N¤È¤¤¤¦½ñ¤Êý¤â¤¦¤Þ¤¤ */ for(i = 2 ; i <= sqrt((float)n); i++) if(p[i] == 1) for(j = 2; i*j <= N ; j++) { /* if [i*j] == 1 ¤È¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢½ÅÊ£¤·¤Æ0¤òÂåÆþ */ p[i*j] = 0; printf("filtered p[%d]\n", i*j); } }