#include <stdio.h>
int gcd2(int a, int b)
{
if (!b) return a;
return gcd2(b, a%b);
}
int main()
{
int a, b, c;
printf("2つの任意の整数を入力せよ:");
scanf("%d %d",&a,&b);
c=gcd2(a,b);
printf("最小公倍数は%d\n",a*b/c);
printf("最大公約数は%d\n",c);
return 0;
}
で、最小公約数を出すことはできたのですが、全ての公約数を表示させたいんです!!どうやったらいいのでしょうか??プログラミングまだ初心者なので、ちょっと行き詰ってしまいました。。。
お時間があればでいいのですが、もう一つわからないプログラムがあります。
自然数nを入力し、x^2+y^2=z^2 (x<y)を満たすようなn以下の自然数の組(x,y,z)がいくつあるのかを出力するプログラムなのですが、全くわからず行き詰っています。。どなたかお時間があれば教えて頂きたいです。
色々と申し訳ありません。お願いします(__)
No.1
- 回答日時:
>全ての公約数
AとBの数字のうち小さい方をXとして、
Xの約数を求める、
求めた約数のウチもう一方の約数になっているか調べる。
なっていたら、公約数。
n以下の自然数の組
n以下の意味は、
x,y,zそれぞれが0<X≦nの意味ですか
それとも
x+y+z≦nの意味?
この回答への補足
>全ての公約数
意味はわかるのですが、printf()の中身など、どうやって全ての約数を表示させるのかがいまいちわかりません。scanfでばらばらの数値を入れるので公約数がいくつ出てくるのかもわからないので。。プログラムで書くとどうゆう風になるかが検討がつかなくて。。
x,y,zそれぞれが0<x,y,z≦nの意味です!
No.2ベストアンサー
- 回答日時:
本当は、もっと使い回しの利くように作ればいいんでしょうが…
とりあえず、#1で言っていることをプログラムにしたものです。
#include <stdio.h>
void main(void){
int a,b;
int x,y;
int i;
/* a と b の共通の約数を求める */
a=156;
b=768;
if(a>b){ /* x<=yにする */
x = b;
y = a;
} else {
x = a;
y = b;
}
printf("%d と %d の共通約数は、",a,b);
for(i=1;i<=x;i++){
if(x % i == 0){/* i は、x の約数 */
if(y % i == 0){/* i は、y の約数でもある */
printf("%d ",i);
}
}
}
}
この回答への補足
for(i=1;i<=x;i++){
if(x % i == 0){/* i は、x の約数 */
if(y % i == 0){/* i は、y の約数でもある */
printf("%d ",i);
このforの中でprintfを表示させることで、全ての公約数を表示させることができるとゆうことですかね??
あと、
if(x % i == 0)
if(y % i == 0)
の部分は
if(x % i == 0)&&(y % i == 0)
でも良いのでしょうか??
No.3
- 回答日時:
n以下のピタゴラス数を求めるんですね?
ピタゴラス数はm,nが互いに疎で一方が偶数、一方が奇数(m>n)のとき、
m^2+n^2,m^2-n^2,2mnで表されるけど、m,nが互いに疎かどうかをGCMを求めて判定しているんですよね??
m,nを適当に決めて(総当りで)m,nのGCMを求めて、GCM>1のとき上記3式を計算すればピタゴラス数が出ます。
再度その3数がある数以下かどうかを判定し、マッチしていれば表示していけばよいです。
私はそうやって「ピタゴラス星雲」を描きました!
No.4
- 回答日時:
#3です。
間違いだらけです・・・GCM=1のときに互いに疎です。ハイ。
nがごっちゃになっていてわかりづらいです。これも申し訳アリマセン。書き直しました・・・
n以下のピタゴラス数を求めるんですね?
ピタゴラス数はα,βが互いに疎で一方が偶数、一方が奇数(α>β)のとき、
α^2+β^2、α^2-β^2、2αβで表されるけど、α,βが互いに疎かどうかをGCMを求めて判定しているんですよね??
α,βを適当に決めて(総当りで)α,βのGCMを求めて、GCM=1のとき上記3式を計算すればピタゴラス数(x,y,z)が出ます。
ちなみにx<y<zの関係があります。
再度その3数x,y,zがある数n以下かどうかを判定し、マッチしていれば表示していけばよいです。
No.5
- 回答日時:
/*
x^2+y^2=z^2 (x<y)を満たすようなn以下の自然数の組(x,y,z)がいくつあるか?
*/
#include <stdio.h>
#include <math.h>
void main(void){
unsigned long x,y,z,n;
unsigned long x2,wk;
unsigned limit,c;
n=100;c=0;
limit = n/sqrt(2.0)+1;/* A^2+A^2<=N^2 → A< N/√2 + 1 */
for(x=1;x<=limit;x++){
x2=x*x;
for(y=x+1;y<=limit;y++){
z=sqrt(wk=x2+y*y)+0.5;
if(wk==z*z){
printf("(x,y,z)=(%lu,%lu,%lu)\n",x,y,z);
c++;
}
}
}
printf("計:%lu組\n",c);
}
No.6
- 回答日時:
#5は間違い
/*
x^2+y^2=z^2 (x<y)を満たすようなn以下の自然数の組(x,y,z)がいくつあるか?
*/
#include <stdio.h>
#include <math.h>
void main(void){
unsigned long x,y,z,n;
unsigned long x2,wk;
unsigned limit,c;
n=100;c=0;
limit = n/sqrt(2.0)+1;/* A^2+A^2<=N^2 → A< N/√2 + 1 */
for(x=1;x<limit;x++){
x2=x*x;
for(y=x+1;y<n;y++){
z=sqrt(wk=x2+y*y)+0.5;
if(z<=n && wk==z*z){
printf("(x,y,z)=(%lu,%lu,%lu)\n",x,y,z);
c++;
}
}
}
printf("計:%lu組\n",c);
}
No.7
- 回答日時:
#2>このforの中でprintfを表示させることで、全ての公約数を表示させることができるとゆうことですかね??
まあ、そうだと思いますけど・
表示させたいということだったので表示しているので、必要充分かと・
使い回しが利くようにするには、可変長のデータを保持できるような(例えばリストのような)データ構造が必要かと思いますが、それは、また別の話。
#2>if(x % i == 0)&&(y % i == 0)
そうですね。
if((x % i == 0)&&(y % i == 0))
で動作は同じになると思います。
xのテストが左に書いてあるのがミソで、同じようでも
if((y % i == 0)&&(x % i == 0))
だと動作が変わってしまうので注意が必要です。
ポイントは、x % i == 0の時だけy % i == 0が評価される(計算される)というところですね。
C言語では、そういう動作が期待できますが、そういう動作をしない言語処理系もあるかもしれません。
まあ、意味をはっきりさせる意味で、ああしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4の倍数を論理演算で表す。。
-
10個出力で改行したいのですが...
-
小数点切捨て表示
-
コーディング
-
scanfに文字が入力されたときに...
-
コマンドラインに出力した文字...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
strcmp
-
C言語のじゃんけんゲームのプロ...
-
2の累乗を計算するプログラム...
-
srand(time(NULL))の使い方
-
c言語 プログラム ピラミッド
-
Cプログラムについて
-
円の面積を求めるプログラミン...
-
cshの文字列操作(0埋め)
-
defineで定数が置き換えられな...
-
unsigned int型について
-
パスカルの三角形についてのCプ...
-
Cでオセロゲームプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報