ディリクレの算術級数定理

mike_090601

ディリクレの算術級数定理
素数の求め方忘れたから,適当にやっちゃいました.
だから処理に時間かかるね.

#include <stdio.h>

int sosu(int n)
{
	if(n < 2)
		return 0;

	if(n == 2)
		return 1;

	for(int i = 2; i <= n/2; i++)
	{
		if(n%i == 0)
			return 0;
	}

	//printf("(%d) ", n);
	return 1;
}

int main(void)
{
	//	ファイル出力準備
	FILE	*pfI;	//	入力ファイルポインタ
    FILE	*pfO;	//	出力ファイルポインタ
	pfI = fopen("a.in", "r");
	if(pfI == NULL)
	{
		printf("ERR: input file open\n");
	}
    pfO = fopen("a.out","w");
    if(pfO == NULL)
	{
		printf("ERR: output file open\n");
        return -1;
    }

	int a, d, n;
	while(1)
	{
		//
		//	入力
		//
		fscanf(pfI, "%d %d %d ", &a, &d, &n);
		//printf("%d %d %d\n", a, d, n);
		if(a == 0 && d == 0 && n == 0)
			break;

		//
		//	処理
		//
		int m = a;
		int c = 0;	//	今までの素数の数,c=nで正解
		int f = 1;
		while(f)
		{
			//printf("%d ", m);
			
			//	素数か調べる
			if(sosu(m))
				c++;

			//
			//	抜けるようにしてあるよ!!!
			//
			if(c == n)
			{
				f = 0;
				fprintf(pfO, "%d\n", m);
				//printf("%d\n", m);
				break;
			}

			//	次の数字へ
			m += d;
		}
		//printf("\n%d\n", c);
	}

    //ファイルポインタを閉じる
	fclose(pfI);
    fclose(pfO);

    return 0;
}