素因数分解のプログラムを作成しました。
なぜか11桁を超えた場合、正しく表示されません!!
アドバイス等お願いします。
あと、処理時間も組んでみましたがこちらもうまくいきません。
改善をお願いしますm(_ _)m
#include<stdio.h>
#include<time.h>
void fanction(int);
void main(void)
{
int n;
clock_t start_time, end_time;
printf("整数を入力してください。\n");
scanf("%d",&n);
start_time = clock();
fanction(n);
end_time = clock();
printf("\n\n処理時間:%.3f秒\n",(double)(end_time - start_time) / CLOCKS_PER_SEC);
return 0;
}
void fanction(int n)
{
int m;
char c='=';
for(m=2;n != 1;m++)
{
while(n%m == 0)
{
n = n/m;
printf("%c%d",c,m);
c='*';
}
}
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
回答の訂正です。
(int型を32bit符号付きと仮定しています)for (m=2; n!=1; m++) を
誤>for (m=2; n>m*m; m++) に変えて、このループを終了した後でnの値を出力する
正>for(m=2;(m<46340)&&(n>=m*m);m++) に変えて、このループを終了した後に
正>if (n>1) printf("%c%d",c,n); を入れる
ここに出てくる46340は最大数2147483647の平方根を切り捨てた値です。mがこれより大きいと、m*mで桁あふれが起きてループが終わらなくなることがあります。
No.4
- 回答日時:
処理時間をミリ秒単位まで正確に計時できているかどうかは別として、大きな素数を入力すればゼロでない所要時間が表示されます。
たとえば、入力値として、32ビット符号付き整数の最大値2147483647(メルセンヌ素数といわれる素数です)を入れて処理が終わるまで待ってみたらどうでしょうか。
時間を短縮したいなら、
for (m=2; n!=1; m++) を
for (m=2; n>m*m; m++) に変えて、このループを終了した後でnの値を出力するようにすると効果があります。
No.3
- 回答日時:
>処理時間も組んでみましたがこちらもうまくいきません。
どんな風にうまくいかないのか、症状を具体的に書きましょう。
# start_time と end_time とが同じで、どんな数値を素因数分解しても
実行時間がゼロ秒になるってこと?
No.2
- 回答日時:
Cの整数型(char,short,int,long等)は、高々、数~数十bitの精度しかありません。
例えば、WindowsのVisual C++なら、int型は32bitであり、(- 2の31乗)から(2の31乗 -1)までの数しか表わせません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
プログラミングで二番目に大き...
-
配列を関数に渡す方法
-
計算結果がlong型以上になる場...
-
scanf関数を用いての加減乗除%...
-
C言語で電卓を作成する。
-
while文について、c言語...
-
VHDLで、case文とwhen文のどち...
-
階乗のプログラム!!
-
C言語で勉強中(max,min)の出し方
-
getcの改行判定
-
入力した数値を0~3乗するプロ...
-
C言語での引数の省略方法
-
Notepad++の関数リスト表示の変...
-
マイナスからプラスへ転じた時...
-
【C++】関数ポインタの使い方
-
DWORDの実際の型は何でしょうか
-
2÷3などの余りについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
getcの改行判定
-
計算結果がlong型以上になる場...
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
scanf関数を用いての加減乗除%...
-
for文について
-
階乗のプログラム!!
-
全角文字の判定
-
C言語の二分法のプログラムにつ...
-
if-else文および標準演算子(*...
-
C言語・最大値を算出するプロ...
-
c言語のプログラムについての質...
-
配列を使って魔方陣
-
行列をべき乗させるプログラム
-
入力した数値を0~3乗するプロ...
おすすめ情報