整数の3乗の関係を求めるプログラムです。パソコンのOSはwin7、32ビット。環境はVisual Studio1998のようです。いずれ、かなり古いバージョンです。プログラムは以下のように単純ですが、計算する数の桁がとても大きくなります。
かなり以前に作ったプログラム(スペックのかなり落ちるバソコンで作った)では、
1^3+6^3+8^3=(0^3+1^3+2^3)^3=9^3、
4^3+24^3+32^3=(1^3+2^3+3^3)^3=36^3、
11^3+66^3+88^3=(2^3+3^3+4^3)^3=99^3、
24^3+144^3+192^3=(3^3+4^3+5^3)^3=216^3
という4つは作り出すことができました。とりあえず10組くらいは探したいと思っています。前回は、マイクロソフトのCもしくはC++だったと思います。今回も、(1^3+6^3+8^3)=(0^3+1^3+2^3)^3=9^3、一組だけは出てくるのですが、二組目以降は出てきません。beki、sigmaの定義かと思って、long int を unsigned long long int にすると、エラーではじかれてしまいます。i、j、k の最大値は、アバウトに決めています。kを10000にすると、明らかなエラーを出します。 よろしくお願いします。(ちなみに、Visual Studio の最新版は、使い方がよくわかりません。)
int main()
{
int i,j,k;
long int beki,sigma;
FILE *file;
file = fopen("bekijyo_3.txt","w");
for (i=1 ; i<300 ; i++ )
{
for (j=i+1 ; j<500 ; j++)
{
for (k=j+1 ; k<2000 ; k++)
{
beki = pow(i,3) + pow(j,3) + pow(k,3);
sigma = pow((i-1),3) + pow(i,3) + pow((i+1),3);
if(beki == pow(sigma,3))
{
printf("ファイルに書き込みます。\n ");
printf("(%d ,%d ,%d)=(%d ,%d ,%d)=(%d) \n",i,j,k,(i-1),i,(i+1),sigma);
fprintf(file, "(%d ,%d ,%d)=(%d ,%d ,%d)=(%d) \n",i,j,k,(i-1),i,(i+1),sigma);
break;
}
}
}
}
fclose(file);
printf("処理が終了したよ~ん!");
return 0;
}
No.4ベストアンサー
- 回答日時:
以下のようにしてください。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
unsigned long pow3(unsigned long a,int e)
{
return (a*a*a);
}
int main()
{
int i, j, k,z;
int ctr = 0;
unsigned long int beki, sigma,temp;
FILE *file;
file = fopen("bekijyo_3.txt", "w");
for (i = 1; i < 300; i++) {
for (j = i + 1; j < 500; j++) {
for (k = j + 1; k < 2000; k++) {
beki = pow3(i, 3) + pow3(j, 3) + pow3(k, 3);
for (z = 1;z < 2000;z++){
sigma = pow3((z-1), 3) + pow3(z, 3) + pow3((z + 1), 3);
temp = pow3(sigma, 3);
if (beki == temp) {
if (ctr == 0){
printf("ファイルに書き込みます。\n");
}
ctr++;
printf("(%d ,%d ,%d)=(%d ,%d ,%d)=(%d) \n", i, j, k,
(z - 1), z, (z + 1), sigma);
fprintf(file, "(%d ,%d ,%d)=(%d ,%d ,%d)=(%d) \n", i,j, k,
(z - 1), z, (z + 1), sigma);
}
if (beki < temp) break;
}
}
}
}
fclose(file);
printf("処理が終了したよ~ん!");
return 0;
}
実行結果
ファイルに書き込みます。
(1 ,6 ,8)=(0 ,1 ,2)=(9)
(4 ,24 ,32)=(1 ,2 ,3)=(36)
(11 ,66 ,88)=(2 ,3 ,4)=(99)
(18 ,24 ,30)=(1 ,2 ,3)=(36)
(24 ,144 ,192)=(3 ,4 ,5)=(216)
(26 ,102 ,208)=(3 ,4 ,5)=(216)
(30 ,164 ,178)=(3 ,4 ,5)=(216)
(45 ,270 ,360)=(4 ,5 ,6)=(405)
(48 ,76 ,212)=(3 ,4 ,5)=(216)
(76 ,456 ,608)=(5 ,6 ,7)=(684)
(102 ,117 ,195)=(3 ,4 ,5)=(216)
(108 ,144 ,180)=(3 ,4 ,5)=(216)
(108 ,360 ,648)=(5 ,6 ,7)=(684)
(125 ,240 ,370)=(4 ,5 ,6)=(405)
(125 ,387 ,1576)=(7 ,8 ,9)=(1584)
(216 ,320 ,652)=(5 ,6 ,7)=(684)
(216 ,368 ,1576)=(7 ,8 ,9)=(1584)
(279 ,297 ,648)=(5 ,6 ,7)=(684)
処理が終了したよ~ん!
もし、これより多くの数値をのぞむなら、あなたのコンパイラでは無理かと思います。8バイト整数型(long long int)を扱うことのできるコンパイラ
が必要になります。
Mingw32ならそれが可能です。
もし、更に多くを望むのであればMingw32をインストールしてください。
下記が参考になるかと。
https://gist.github.com/Hamayama/362f2eb14ae26d9 …
tatsumaru77 さん、ありがとうございました。助かりました。プログラムそのもので、実は、他の項でも使おうと考えていたので、バッチグー!! です。
No.3
- 回答日時:
ひょっとすると余計なことかもしれんが.
1^3+6^3+8^3=(0^3+1^3+2^3)^3=9^3、
4^3+24^3+32^3=(1^3+2^3+3^3)^3=36^3、
11^3+66^3+88^3=(2^3+3^3+4^3)^3=99^3、
24^3+144^3+192^3=(3^3+4^3+5^3)^3=216^3
って, 全部本質的に同じじゃね?
確かに、今まで気づきませんでした。おっしゃる通り、2行目は1行目の4^3倍、3行目は1行目の11^3倍、4行目は1行目の24^3倍ですね。これは、大きな発見です。ありがとうございました。1、4、11、24、‥‥の数列に規則を見出せば、それでよいかもしれませんが、ちょっとデータが少ないですね。
ただ、もしプログラムが間違っていなければ、これら4行とも結果に出てくるはずですよね。ところが1つしか出てこないのでこうやって、広くお願いしたのです。
No.2
- 回答日時:
あなたの求めていることをやっていないという意味では「バグ」なんだろうけど....
例えばこのプログラムでそれぞれの変数がどういう値のときに
4^3+24^3+32^3=(1^3+2^3+3^3)^3=36^3
(に対応するもの) が出力されるのか, 説明できますか?
ご連絡、ありがとうございます。
(i,j,k)=(4,24,32)というセットのときです。i が1ずつふえていくのは、確認しました。そのiが1つ増える間に、iもkも増えているはずです。
改めて確認したところ、(i,j,k)=(1,69,1290)でbeki=2147017510ですが、(i,j,k)=(1,69,1291)でbeki=-2142953615 とマイナスに変わっていました。beki は long int なので、2147483647 の上限を超えてしまったようです。unsigned long long int が現環境で使えないものか、何か代替案がないものか、教えてください。jを100、kを500に変えてみましたが、桁数が減ったものの、新たな解は引き出せませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語プログラミングで初項を1....
-
C言語初心者です。計算がうまく...
-
モンテカルロ法で三角錐の体積...
-
コンソールAPIのSetConsoleScre...
-
getch / putch用のヘッダ
-
c言語つくってみました
-
C言語 遺伝的アルゴリズムでの...
-
Expression: nptr != NULL
-
加減剰余のオーバーフローについて
-
プログラムエラー
-
ウィルキンソン型分配器について
-
互いに素と負の数
-
時定数
-
油圧装置のエアーブリーザーに...
-
オシロスコープのDCとAC
-
火力発電 蒸気タービンのMSV、C...
-
中学受験 規則性の問題の説明...
-
(2x-1)2乗=5の答えを解説付き...
-
電験三種の電力で、水車発電機...
-
spi 非言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語プログラミングで初項を1....
-
Expression: nptr != NULL
-
C言語のエラーについて
-
プログラミングが分かりません。
-
C言語 コンパイルエラー(文字...
-
C言語初心者です。計算がうまく...
-
C言語で自作ヘッダーを作ったの...
-
C言語のソースコードについて教...
-
加減剰余のオーバーフローについて
-
分割コンパイルの手順と方法に...
-
プログラムがエラーが出る原因
-
'printf':識別子が見つかりませ...
-
C言語:2つの複素数(分数)の四...
-
TCP/IP: 非ソケットに対するソ...
-
getch / putch用のヘッダ
-
doubleからintへのキャスト
-
コンソールAPIのSetConsoleScre...
-
3×3のラテン方陣をつくるプログ...
-
リターンキー又は、スペースキ...
-
コンパイルエラー (超初心者...
おすすめ情報
補足。計算が無用のために、ファイル書き込みでは、3乗を省いています。ああ、ここに書いておくべきだったのでしたね。
このプログラムは使いまわしをしているために、下記のインクルードがあります。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
本文とこれ以外には、1行もありません。よろしくお願いします。
tatsumaru77さん、Tacosanさん、本当にありがとうございました。今回は、 tatsumaru77さんにベストアンサー賞を差し上げたいと思います。