読者です 読者をやめる 読者になる 読者になる

C言語の復習<配列>1000までの整数の全ての素数を求めるプログラム

#include <stdio.h>

#define	N	1000	/* Nまでの素数を求める	*/
#define	TRUE	1	/* 	真:素数である	*/
#define FALSE	0	/* 偽:素数でない */
char	is_prime[ N+1 ];	/* 結果を格納する配列 */

int main( void )
{
	int i, j, k = 0;

	/* 配列を初期化 */
	for( i = 1; i <= N; i++)
	{
		is_prime[ i ] = TRUE;	/* 最初は全て「素数」とする */
	}
	is_prime[ 1 ] = FALSE;


	/* エラトステネスのふるい */
	for( i = 2; i*i <= N; i++)
		if(is_prime[ i ])
			for( j = i*2; j <= N; j += i)
				is_prime[ j ] = FALSE;	/* この倍数は「素数」ではない */

	/* 結果の出力 */
	printf( "%dまでの素数は、\n", N );
	for( i = 1; i <= N; i++ ){
		if( is_prime[ i ]){
			printf( "%d\t", i);
			k++;
		if( k % 10 == 0)
			printf("\n");
		}
	}
	return 0;
}

実行結果

1000までの素数は、
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	

参考図書

C言語によるプログラミング 応用編

C言語によるプログラミング 応用編