Elec Days

電子工作やelectric的なこと、日常の出来事について、紹介していきます。
Elec Days TOP  >  スポンサー広告 >  プログラミング  >  素数 >  【C言語】素数を求めるプログラム Ver.3

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

【C言語】素数を求めるプログラム Ver.3

こんにちは。

いま、渋谷駅にニンテンドー3DSが置いてあるんですけど、一応立体に見えないことはないですね。
ただ、ソフトがいけないのか、画面がまだまだなのか、CGが悪いのか、どれだか分りませんですけど、ちょっといまいち。
本物の3Dはあと数年待ちましょう。


で、【C言語】素数を求めるプログラム_改良版 をもうちょっと改良しました。


まず、「素数を求めさせる範囲が広いと、計算にスピードがかかってなかなか結果が表示されない」という指摘があったので、素数を見つけ次第表示するようにしました。
(うん、これは重要なことだと思う)

あと、皆さんもお気づきのことだと思いますが、実はあのプログラム、素数として「2」が表示されないんですね。
(こういう問題はよく起こりそうだと思っていたが、本当に起こってしまった…)
で、解決策は

  if(x <= 2){
    printf("2\n");
    num[m] = 2;
    m++;
  }

つまり、「無理やり「2」を表示させる!!」。
たぶんこうするのが一番スピードが速いんだと思います。せこいけど。

あ、そーだファイルをアップロードしないと。

・実行ファイル(sosu.ver.3.exe)

2月16日追加 ・実行ファイル(ライブラリ付属)(sosu.ver.3lib.exe)
※お使いのパソコンに Microsoft Visual C++ 2010 または C# 2010 がインストールされていない場合は、こちらをお使いください。

・ソースファイル(sosu.ver3.c)
※ブラウザーで表示すると表示が崩れる可能性がありますので、ダウンロードしてからご覧ください。
 メモ帳で読むこともできます。Microsoft Visual 推奨。

<sosu.ver3.c>

#include <stdio.h>
#include <time.h>

/* sosu関数の宣言 */
void sosu(void);

int main(void)//素数の計算の繰り返しを行う
{
	int h = 1;
	int v;

	while(h > 0){
		sosu();
		
		printf("プログラムを続行して、再び計算をやらせますか?\nもう1度計算をさせる場合には半角で0、プログラムを終了させるには半角で1を入力してください。\n");
		scanf("%d", &v);

		if(v==1){
			printf("プログラムを終了しました。\n");
			return 1;
		}
		else{
			printf("プログラムを続行します…\n\n");
		}
	}

	return 0;
}


/* sosu関数の定義 */
void sosu(void)
{
	int x;
	int y;

	int i;

	int num[10000];

	int m = 0;

	int a = 0;

	int b;

	FILE *fp;

	time_t t;

	char str[50];


	printf("素数を求める範囲を入力してください。\n");
	printf("最小値\n");

	scanf("%d", &x);

	printf("最大値\n");

	scanf("%d", &y);

	printf("\n素数を求めています…\n");

	if(x <= 2){
		printf("2\n");
		num[m] = 2;
		m++;
	}

	for(i=x; i<=y; i++){
		int z;

		for(z=2; z<i; z++){
			if(i%z == 0)
				break;
			else if(z == i-1){
				printf("%d\n",i);
				num[m] = i;
				m++;
			}
		}
	}

	printf("選択された範囲の中に素数は%d個ありました。\n", m);

/*	num[m++] = 0;

	while(num[a] != 0){
		printf("%d\n", num[a]);
		a++;
	}
*/
	printf("素数をファイルに出力しますか?出力する場合は半角で0を入力してください。出力させない場合には半角で1を入力してください。\n(ファイルはこの実行ファイルがあるフォルダーに作られます。)\n");

	scanf("%d", &b);

	if(b == 0){
		sprintf(str, "%ld", time(&t));
		printf("ファイル名は%sです。\n", str);
		fp = fopen(str, "w"); 

		if(fp == NULL){
			printf("ファイルを作成できませんでした。\n");
			return;
		}
		else{
			a = 0;

			fprintf(fp, "選択された範囲の中に素数は%d個ありました。\n", m);


			num[m] = 0;

			while(num[a] != 0){
				fprintf(fp, "%d\n", num[a]);
				a++;
			}
			fclose(fp);
		}
	}
}



以上バージョン3でした。


ちなみに、今作ろうと思っているプログラム
・素因数分解をするやつ
・約数をすべて出すやつ
・公約数をすべて出すやつ
・連立方程式を解くやつ
  ↓
(二次方程式を解くやつ)

なんかできそうだけど、時間がないんだなー


では
関連記事
[ 2011/02/02 20:24 ] プログラミング 素数 | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

elecho

Author:elecho
 
ElecDays にようこそ!!

趣味は、電子的なもの(電子工作やコンピュータ)なので、そういうものについて書くと思います。
あと、学生です。

よろしくお願いします。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。