STEP 6.2¡¡¡Ê¥¨¥é¥È¥¹¥Æ¥Í¥¹¤Î¤Õ¤ë¤¤¡Ë ´Ø¿ô

<ÌäÂê> 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);
            }
}