明日までの提出とかなり切羽詰ってます><
プログラムは2〜100の範囲の自然数nを入力して2〜nの範囲の素数を
すべて表示させるというものです。範囲外なら再度入力もとめるようです。
primeなしです><
試し割り法ってので挑戦してみましたorz
#include <stdio.h>
void main()
{
int i,j,Num;
printf("2〜100の範囲の自然数を入力してください\n");
scanf("%d",&Num);
if(Num < 0 || Num > 100){
printf("範囲外です.再度入力してください.\n");
scanf("%d",&Num);
}
for(i = 3; i <= Num; i++){
for(j =2; j<i/2;j++){
if (i % j != 0){
printf("%d",i);
}}}}
こんなのうったらわけわかめのものがでてきました汗
よろしければ救済お願いしますorz
n以下の素数列挙
-
管理人
Re:n以下の素数列挙
http://www.tsg.ne.jp/TT/tsg/c/mansaku/P01.html
この辺参考になるでしょうか。
要は、「全部割れなかったら」素数なわけでして、一回の比較で割れなかったからと言って素数とは限りません。
例えば15は2では割れませんが、3では割り切れます。
において、breakが行われなかったかどうかは、for文を抜けた後に、iが②になっているかどうかでわかります。
for(i=0;i<10;i++)
でまわった時、最後までfor文が行われたら括弧から出た時、iは10になっています。
それまでに条件にマッチして抜けたのなら10にはなりません。
これを利用して全部割れなかったかどうか判断してください。
この辺参考になるでしょうか。
要は、「全部割れなかったら」素数なわけでして、一回の比較で割れなかったからと言って素数とは限りません。
例えば15は2では割れませんが、3では割り切れます。
for(j=① ; j<② ; j++){
if(条件)break;
} において、breakが行われなかったかどうかは、for文を抜けた後に、iが②になっているかどうかでわかります。
for(i=0;i<10;i++)
でまわった時、最後までfor文が行われたら括弧から出た時、iは10になっています。
それまでに条件にマッチして抜けたのなら10にはなりません。
これを利用して全部割れなかったかどうか判断してください。
-
Hermit
Re:n以下の素数列挙
エラトステネスのふるいの方法ではこんな感じかな。
極力簡単に書いたつもりでは有るけど・・・
範囲外の処理は出来そうだったので(良くは見ていないが(^^;)
自分でくっつけてください。
極力簡単に書いたつもりでは有るけど・・・
#include <stdio.h>
#define MAX 100
int main() {
static char buff[MAX+1];
int i;
buff[0] = buff[1] = 1;
for (i = 2; i <= MAX; i++) {
int j;
for (j = i + i; j <= MAX; j += i)
buff[j] = 1;
}
for (i = 0; i <= MAX; i++)
if ( buff == 0)
printf("%d\n",i);
return 0;
} 範囲外の処理は出来そうだったので(良くは見ていないが(^^;)
自分でくっつけてください。
-
orz
Re:n以下の素数列挙
ありがとうございます。これで何とかのりきれます。ただ、見てもまったくわからないじぶんがorz
あとでがんばってみます><
forとわりざんのよじょうこう?%でがんばろうとしたんですがしっぱいしました
夜更けにありがとうございました。
あとでがんばってみます><
forとわりざんのよじょうこう?%でがんばろうとしたんですがしっぱいしました
夜更けにありがとうございました。
-
管理人
Re:n以下の素数列挙
昨日は1時位には寝てしまったので拝見できませんでした、今日提出だったのにすみません(_ _||)
breakはループ文から抜けるという意味です。
簡単な構文については、
「C言語 入門」 でググルと沢山参考になるサイトが出てきますので、そちらをご覧下さい。
仰るようにforとifだけで出来ますよ。breakは難しいものじゃないですし。
Hermitさんのコードもforとifだけですし、まぁ次の課題で頑張ってください^^;
breakはループ文から抜けるという意味です。
簡単な構文については、
「C言語 入門」 でググルと沢山参考になるサイトが出てきますので、そちらをご覧下さい。
仰るようにforとifだけで出来ますよ。breakは難しいものじゃないですし。
Hermitさんのコードもforとifだけですし、まぁ次の課題で頑張ってください^^;
-
Hermit
Re:n以下の素数列挙
ホントはこれくらいにしたかったのだけど、
分かるかどうか不安だったので(^^;
<= MAX の部分も、 < sizeof buff の方が好きなんだが・・・変更しにくくなりそうなので。
分かるかどうか不安だったので(^^;
#include <stdio.h>
#define MAX 100
int main() {
static char buff[MAX+1];
int i;
buff[0] = buff[1] = 1;
for (i = 2; i <= MAX; i++) {
int j;
if (buff == 0)
if ((j = i * i) <= MAX)
do
buff[j] = 1;
while ((j += i) <= MAX);
}
for (i = 0; i <= MAX; i++)
if ( buff == 0)
printf("%d\n",i);
return 0;
} <= MAX の部分も、 < sizeof buff の方が好きなんだが・・・変更しにくくなりそうなので。