初めての質問なのでカテゴリが違うかもしれませんが
すみません。

a^b を 10^c で割った余りを求めるプログラムを作成したいのですが、
以下の条件を満たしながら解く方法が分かりません。

どなたかご教授下さい。
解き方さえ分かれば言語は不問です。

1≦a≦999999999
1≦b≦999999999
1≦c≦4
宣言した変数は11桁以上の値は保持できない。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

要するに冪剰余を求めたいのね。


ここ読めば分かるんじゃないかな。
http://ja.wikipedia.org/wiki/%E5%86%AA%E5%89%B0% …
    • good
    • 0
この回答へのお礼

「べき乗余」という言葉さえ知りませんでしたが、
まさしくこれですね!
こんなに早く回答が頂けるとは思いませんでした。
ありがとうございます!

お礼日時:2009/05/25 22:36

VBS(VBScript)です。

メモ帳か何かで保存して拡張子を.vbsにしたら動きます。

----

a = 1
b = 1
c = 1

'変数の評価
bFlag = True
bFlag = bFlag And (1 <= a) And (a <= 999999999)
bFlag = bFlag And (1 <= b) And (b <= 999999999)
bFlag = bFlag And (1 <= c) And (c <= 4)

'結果を出力
WScript.Echo "a=" & a & ", b=" & b & ", c=" & c
If bFlag Then'変数の値が有効な場合
WScript.Echo "Result: " & ((a ^ b) Mod (10 ^ c))
Else'変数の値が無効な場合
WScript.Echo "Result: Failed."
End If
    • good
    • 0
この回答へのお礼

私の表記の仕方が悪かったのですが、11桁以上の計算ができないもの
(電卓のように桁が制限されている)に計算させたいのです。
今かいている文章も上手く伝えられていない気がしますが…
ですが迅速な回答ありがとうございました!

お礼日時:2009/05/25 22:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qマイナス金利で物価上昇?マイナス金利で物価が上昇する理由は、銀行がお金を貸すので、お金が余り余っ

マイナス金利で物価上昇?

マイナス金利で物価が上昇する理由は、銀行がお金を貸すので、お金が余り余ってお金の需要と供給が供給が上回り、買いたいものが買える状態で物が奪い合いになって物価が上がる?

それとも、マイナス金利で円安になって、外国製品を買うのに円をたくさん使うことになって物価が上がる?

どっちの影響が大きいのでしょうか?

Aベストアンサー

大した影響はない。

EUで判明済み。

QC言語でsqrt(a^2+b^2)のテーブル引き

プログラムに悩んでいるものです.

とある画像処理のプログラムを組んでいるのですが,処理が遅くテーブル引きを組んでいます.
三角関数などはすんなりできたのですが,質題にもある通りsqrt(a^2+b^2)が実現できず,この場を借りて質問させていただきました.
以下にプログラムの一部を示します.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
void filter(unsigned char* d, short *dx, short *dy, int w, int h)
{
///// テーブル生成 /////
static int c_size = 0;// static 次の呼び出しでも値保持
static double *c_sqrt = NULL;//
c_size = 255;              // u,v:0~255
c_sqrt = (double *)malloc(sizeof(double)*c_size*c_size);// 領域確保
for(int i=0; i<c_size; ++i){    // 有りえるすべての値を生成
for(int j=0; j<c_size; ++i){
c_sqrt[i*j] = sqrt( (double)(i*i + j*j) );
}
}
///// d = sqrt(dx^2 + dy^2) /////
for(int y = 1; y < h-1; ++y){
for(int x = 1; x < w-1; ++x){
double u = (double)dx[y*w+x];
double v = (double)dy[y*w+x];
int val = (int)c_sqrt[ (int)(u*v) ] /4;
if (val>255) val=255;
d[y*w+x] = val;
}
}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
見てご察し頂ける(?)と思いますが,この関数は何回も呼び出すので,上のほうででテーブル引きしようとしてます.
ただ明らかなプログラム経験不足のためかうまくいってません.
個人的にはc_sqrtを別途関数c_sqrt(u,v)にしたほうがよいのかと思ってます.
どういうプログラム記述をすれば,このテーブル引きが実現できるでしょうか?
ご回答,お力添え,よろしくお願い致します.

プログラムに悩んでいるものです.

とある画像処理のプログラムを組んでいるのですが,処理が遅くテーブル引きを組んでいます.
三角関数などはすんなりできたのですが,質題にもある通りsqrt(a^2+b^2)が実現できず,この場を借りて質問させていただきました.
以下にプログラムの一部を示します.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
void filter(unsigned char* d, short *dx, short *dy, int w, int h)
{
///// テーブル生成 /////
static int c_size = 0;// static 次の呼び...続きを読む

Aベストアンサー

何をやりたいのか今ひとつ見えませんが、
c_sqrt[i*j] = sqrt( (double)(i*i + j*j) );
とやってしまうと、
i=2、j=8の時には
c_sqrt[16]=√(2*2+8*8)=√68

i=4、j=4の時は
c_sqrt[16]=√(4*4+4*4)=√32
ということで、c_sqrt[16]が上書きされてしまいますが、それで良いんでしょうか?

sqrt(a^2+b^2)
の値引きテーブルを作るならc_sqrt[a][b]のような二次元配列で用意してやるのが常道ではないかと思います。

QC言語で余りがマイナスになる場合

表題の通り、以下の計算をすると場合によってはcがマイナスになります。

 c = a % b

ただし、aもbも正の整数
具体的にどんな時にこの現象が起こるのかわかる方いらっしゃいますか?
また、回避策などわかりましたら教えていただきたいのですが。
よろしくお願いします。

Aベストアンサー

> long PowerMod_C(long a, long n, long m)
> {
>   unsigned long pw;
>   pw = 1;
(中略)
>   return pw;
> }

関数の引数と戻り値の型がlongなのに、pwだけunsigned longにしてもだめです。

実際に変数の値をループ1回ごとに表示させてみると

a=412, n=1423, m=64543, pw=1
a=40658, n=711, m=64543, pw=412
a=62191, n=355, m=64543, pw=34459
a=-36698, n=177, m=64543, pw=18440
a=53509, n=88, m=64543, pw=40139
a=-61389, n=44, m=64543, pw=40139
a=-9810, n=22, m=64543, pw=40139
a=2487, n=11, m=64543, pw=40139
a=53584, n=5, m=64543, pw=42215
a=-32746, n=2, m=64543, pw=10039
a=47657, n=1, m=64543, pw=10039
a=-31882, n=0, m=64543, pw=35907

この中で複数回aがマイナスになっています。

ちなみにすべての変数を、long long int (64bit int)にしてみると

a=412, n=1423, m=64543, pw=1
a=40658, n=711, m=64543, pw=412
a=62191, n=355, m=64543, pw=34459
a=45749, n=177, m=64543, pw=18440
a=35140, n=88, m=64543, pw=34550
a=47467, n=44, m=64543, pw=34550
a=49045, n=22, m=64543, pw=34550
a=23501, n=11, m=64543, pw=34550
a=2550, n=5, m=64543, pw=8610
a=48200, n=2, m=64543, pw=10880
a=14715, n=1, m=64543, pw=10880
a=54003, n=0, m=64543, pw=32560

となりました。
こちらが求めている解なのではありませんか?

ということで、途中でオーバーフローが発生しています。

> long PowerMod_C(long a, long n, long m)
> {
>   unsigned long pw;
>   pw = 1;
(中略)
>   return pw;
> }

関数の引数と戻り値の型がlongなのに、pwだけunsigned longにしてもだめです。

実際に変数の値をループ1回ごとに表示させてみると

a=412, n=1423, m=64543, pw=1
a=40658, n=711, m=64543, pw=412
a=62191, n=355, m=64543, pw=34459
a=-36698, n=177, m=64543, pw=18440
a=53509, n=88, m=64543, pw=40139
a=-61389, n=44, m=64543, pw=40139
a=-9810, n=22, m=64543, p...続きを読む

Qc#について質問があります。 a b c d など任意の文字を入れたら abcd とスペースを

c#について質問があります。
a b c d
など任意の文字を入れたら
abcd
とスペースをなくすプログラムを作成したいです。
任意の数字なので
string a=console.ReadLine()
とします。
この後から分かりません。
わかる方教えてください(´・_・`)

Aベストアンサー

No1の方の回答は、
a内のスペースを""(長さ0の文字列)に置き換える方法です。
この方法がシンプルでかつ速いため、実戦では、この方法を採用したほうが良いでしょう。
a内のスペースを取り除くことを自前で行うには、どうするかという観点で考えると、
以下のようになります。
----------------------------------
using System;
namespace goo
{
class Program
{
static void Main(string[] args)
{
Console.Write("文字列を入力してください:");
string a = Console.ReadLine();
string b = "";
int i;
for (i = 0; i < a.Length; i++)
{
if (a[i] != ' ')
{
b = b + a[i];
}
}
Console.WriteLine(b);
}
}
}
------------------------------------------------------
結果を格納する文字列として、bを用意しておき、
a内の空白でない文字をbへ加算していきます。
実行結果は以下のようになります。
文字列を入力してください:a b c h
abch

No1の方の回答は、
a内のスペースを""(長さ0の文字列)に置き換える方法です。
この方法がシンプルでかつ速いため、実戦では、この方法を採用したほうが良いでしょう。
a内のスペースを取り除くことを自前で行うには、どうするかという観点で考えると、
以下のようになります。
----------------------------------
using System;
namespace goo
{
class Program
{
static void Main(string[] args)
{
Console.Write("文字列を入力してください:");
string a = Console.ReadLine()...続きを読む

Qマイナスの割り算の公式

マイナスの割り算が分かりません。
公式などありますでしょうか?

(1)A ÷ (-B) =Z 余りY
(2)(-A) ÷ B =Z 余りY
(3)(-A) ÷ (-B) =Z 余りY

ZとYは何?

マイナスの割り算で検索したところヒットした項目があったのですが、それを読んでも理解できませんでした。

マイナスで割るってことは物理的にどういうことなのでしょうか?

よろしくお願いします

Aベストアンサー

これは、やっかいですが大切な問題です。
以前に関連する質問があります。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1057715

結論をいうと、どうするかが決まっていません。自分が解きたい問題に応じて、あるいは割り算の使いみちに応じて、どちらかに定義しなければなりません。特に、コンピュータプログラミングでは、お使いの言語で割り算の商と剰余がどう定義されているかを確かめておくことが大切です。

まずは、大原則です。

「A÷B=Q余りR」⇒「A=B×Q+R」かつ「|R| <|B|」

「A÷B=Q余りR」であれば、必ず「A=B×Q+R」であり、|R| <|B| でなければなりません。| | の記号は絶対値を表します(プラスの値はそのまま、マイナスの値はプラスに変えるという意味です)。(例、-3の絶対値は+3)

さて、ここで問題が生じます。
<Aがマイナス、Bがプラスのとき>
たとえば、
ア.(-13)÷5=-2あまり-3 ⇒ -13 = 5×(-2)+(-3), |-3|<|5|
イ.(-13)÷5=-3あまり2 ⇒ -13 = 5×(-3)+2, |2|<|5|
と2通りの答があり、どちらも上の大原則を満たします。これに対して、
http://www.hokuriku.ne.jp/fukiyo/math-qa/amari.htm
上記のページは、余りは常に正という立場です。これは、数学計算の場合、剰余類を使うときに都合がよいからです。そのため、イ.を定義としています。岩波数学辞典でもイ.の定義を採用しています。しかし、コンピュータプログラミングの世界では、C言語の%やdiv関数のようにア.を採用することが多いのです。ExcelのMOD関数ではイですが、VBのMod関数はアです。

<Aがプラス、Bがマイナスのとき>
たとえば、
ウ.13÷(-5)=-2あまり3 ⇒ 13 = (-5)×(-2)+3, |3|<|-5|
エ.13÷(-5)=-3あまり-2 ⇒ 13 = (-5)×(-3)-2, |-2|<|-5|
と2通りの答があり、どちらも上の大原則を満たします。余りを常に正とする立場では、ウを採用することになります。岩波数学辞典には、除数が負の場合の定義がありません。C言語ではウですが、ExcelのMOD関数ではエです。VBのMod関数はウです。

<Aがマイナス、Bがマイナスのとき>
たとえば、
ウ.(-13)÷(-5)=2あまり-3 ⇒ -13 = (-5)×2+(-3), |-3|<|-5|
エ.(-13)÷(-5)=3あまり2 ⇒ -13 = (-5)×3+2, |2|<|-5|
と2通りの答があり、どちらも上の大原則を満たします。余りを常に正とする立場では、エを採用することになります。しかし、C言語でもExcelのMOD関数でもウを採用しています。

このページも参考になります。
http://www.keep-on.com/excelyou/2000lng2/200006/00060016.txt

参考URL:http://www.keep-on.com/excelyou/2000lng2/200006/00060016.txt

これは、やっかいですが大切な問題です。
以前に関連する質問があります。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1057715

結論をいうと、どうするかが決まっていません。自分が解きたい問題に応じて、あるいは割り算の使いみちに応じて、どちらかに定義しなければなりません。特に、コンピュータプログラミングでは、お使いの言語で割り算の商と剰余がどう定義されているかを確かめておくことが大切です。

まずは、大原則です。

「A÷B=Q余りR」⇒「A=B×Q+R」かつ「|R| <|B|」

「...続きを読む

Q”int *a,*b”というポインタ変数宣言した値でa=&bということ

”int *a,*b”というポインタ変数宣言した値でa=&bということはできる?


”int *a,*b”このような変数をグローバル宣言した場合、
a=&bというようなことはできるのでしょうか?


”int *a,*b”
この宣言で、
aが10番地
bが20番地に定義されたと仮定しています。

Aベストアンサー

#6です。
>回答頂きありがとうございます。
>一応整理させてください。
>質問1:
>(1)int *a, *b; //宣言
>(2)a = b;
>これをメモリアドレスの変化で見ていった場合、
>(1)
>アドレス10:a NULL
>アドレス20:b (仮に1200)
>(2)
>アドレス10:a (仮に1200)
>アドレス20:b (仮に1200)
回答:
OKです。但し
アドレス10:a NULL のところは正確には、アドレス10:a 不定
となります。
不定の意味は初期化していないので何が入っているか判らない。
(0かも知れないし、そうでないかも知れない。あるいは35かも知れないし、そうでないかもしれない)
という意味です。(NULLの箇所は以降同じです)


>質問2:
>(1)' int *a, *b; //宣言
>(2)' a = (int *)&b;
>これをメモリアドレスの変化で見ていった場合
>(1)'
>アドレス10:a NULL
>アドレス20:b NULL
>(2)'
>アドレス10:a 20
>アドレス20:b NULL
>このような違いがあるということですね。
回答
はい、その通りです。

>質問3:
>int *a, *b; //宣言
>a=&b;
>このやり方はできないので、
>もし、やりたいのならば、
>(1)'' int **a, *b //宣言
>(2)'' a=&b;
>これをメモリアドレスの変化で見ていった場合
>(1)''
>アドレス10:a NULL
>アドレス20:b NULL
>(2)''
>アドレス10:a 20
>アドレス20:b NULL
>このようにメモリ内が変化していくということなんでしょうか?
回答
はい、その通りです。
>質問3のポインタのポインタの使い方はこれでよいでしょうか?
回答
はい、よいです。
ちなみに、このような事例に遭遇することはないでしょうが、
int ***a,**b;
の場合、a=&bは構文的に正しいです。
a=(int***)b;(強引なキャスト)
も正しいです。
int *a;
int **a;
int ***a;
の違いを理解することが必要です。
使いませんが、
int **********a;なども構文的にはありです。

#6です。
>回答頂きありがとうございます。
>一応整理させてください。
>質問1:
>(1)int *a, *b; //宣言
>(2)a = b;
>これをメモリアドレスの変化で見ていった場合、
>(1)
>アドレス10:a NULL
>アドレス20:b (仮に1200)
>(2)
>アドレス10:a (仮に1200)
>アドレス20:b (仮に1200)
回答:
OKです。但し
アドレス10:a NULL のところは正確には、アドレス10:a 不定
となります。
不定の意味は初期化していないので何が入っているか判らない。
(0かも知れないし、そうでないかも知れない。あるいは35かも知れない...続きを読む

Qプラス・マイナス・・・・・・・ゼロ?

学生の頃の担任の先生に、
「人生はプラス・マイナス・ゼロだ。俺はそう思っている・・・・・」みたいなことを言われました。
正直言って、その時は余りピンとこなかったというか、そうかなあ、というのが率直な気持ちでした。
今でも、そうだ、とは言い切れません。

本当にそうなのでしょうか。
正直なところ、皆さんは、どう思ってらっしゃいますか。

Aベストアンサー

 そうですねぇ、、生命をもらって、時を過ごして、失ってゼロ(原点)に還る……という人生論みたいなことならプラスマイナスゼロとも言い換えられましょうが、そういうつもりで発言されたかどうかは、文脈がわからないので謎ですね。
 あるいは、自分より年若く未来の希望に溢れて見える者たちを前にして、「思い上がるな」「身の程を知れ」みたいな警告で言われたのかも知れませんし。
 しょせん、人とは孤独なもんだ……みたいな無情感ただようつぶやきにもとれますね。

 でも、エントロピー増大の法則もありますし、算数のようには世の中できていないとわたしは思いますよ。
 1+1=2とは限らないのが、たとえば人間関係。
 1×1=3? 1÷1=0?? 1-1=1???(こういう数式から物語を考えるのも楽しそうですね)
 本当に、何が起こるかはわからないと思います。
 得た物もいつか失う時がくる、たとえそうであっても想い出は残ります。
 もし何かを失う事をそのように自分に言い聞かせなければいられなかったのなら、その先生は先生なりの寂しそうな物語があったのでしょう。(それを生徒に語るべきかどうかはさておいて)
 頑張って獲得したもの、それをたとえ失っても、手にしていた間に少しでも得られた別のものがあったはずでしょうに。。

 と、わたしは思うのですが、いかがでしょう。
 

 そうですねぇ、、生命をもらって、時を過ごして、失ってゼロ(原点)に還る……という人生論みたいなことならプラスマイナスゼロとも言い換えられましょうが、そういうつもりで発言されたかどうかは、文脈がわからないので謎ですね。
 あるいは、自分より年若く未来の希望に溢れて見える者たちを前にして、「思い上がるな」「身の程を知れ」みたいな警告で言われたのかも知れませんし。
 しょせん、人とは孤独なもんだ……みたいな無情感ただようつぶやきにもとれますね。

 でも、エントロピー増大の法則も...続きを読む

QC言語 b += a ? 1 : 0; の意味

C言語を勉強中 b += a ? 1 : 0;  という1文があり??な状態になってしまいました。(+=、?:の意味はわかります。おそらく。)

これは aが0以外ならb=b+1;、aが0ならb=b+0; (aは条件であり、bにたされるわけではない。)。if文より文が短く、処理も早い、という利点。 で間違いないですか?


自信を持って次に進みたいので、どなたか教えていただきたいと思います。お願いします。

Aベストアンサー

★解釈は合っています。
>if文より文が短く、処理も早い、という利点。 で間違いないですか?
 ↑
 条件演算子(三項演算子)は『if』文を使わないため関数の引数や『for』文の式にも
 記述できるメリットがあります。
 私はマクロ関数などでは良く使います。
 もちろん代入文とかでも使うこともあります。
 多用すると分かりにくくなるため注意が必要かもしれませんね。

サンプル1:
int i;

for ( i = 0 ; i < (sw ? 100 : 200) ; i++ ){
 :
}
※変数『sw』の真偽により繰り返しの回数を100か、200に制御しています。
※通常あまりこのような事はしませんが、for文の条件式として利用できます。

サンプル2:
int sign;

sign = ((value < 0) ? -1 : (value > 0) ? +1 : 0);
※変数『value』の符号情報を sign に -1、0、+1 をセットします。
※このような使い方はマクロ関数を用意してたまに利用しています。

その他:
>自信を持って次に進みたいので、どなたか教えていただきたいと思います。お願いします。
 ↑
 それなら1つ問題です。
 (1)ans = (a ? b : c ? d : e);
 (2)ans = (a ? b ? c : d : e);
 この2つの式は動作が全く異なりますが、日本語(文章)で説明できますか?
・補足にどう解釈したかを書いてみて下さい。

★解釈は合っています。
>if文より文が短く、処理も早い、という利点。 で間違いないですか?
 ↑
 条件演算子(三項演算子)は『if』文を使わないため関数の引数や『for』文の式にも
 記述できるメリットがあります。
 私はマクロ関数などでは良く使います。
 もちろん代入文とかでも使うこともあります。
 多用すると分かりにくくなるため注意が必要かもしれませんね。

サンプル1:
int i;

for ( i = 0 ; i < (sw ? 100 : 200) ; i++ ){
 :
}
※変数『sw』の真偽により繰り返しの回数を100...続きを読む

Q負の余りはあり得ますか?

余りは必ず正でないといけないのでしょうか?

例えば、10÷3は「3余り1」ですよね。これが「4余り-2」だと間違いでしょうか?

例えば、(-10)÷3は「-3余り-1」なのか、「-4余り2」なのか、どちらが正しいのでしょうか?

ちなみにExcelでは、前者は「3余り1」、後者は「-4余り2」と返します。

Aベストアンサー

皆さん書いておられる通り、これは
余りの定義の問題なのですが、
「割り算の定義の問題」と
言い替えてみると、しっくり来る
ような気がします。

正の余りが出る割り算と
負の余りが出る割り算は、
同じ ÷ の記号で書いていても、
異なる演算だ という訳です。

ひと括りに割り算といっても、
いろいろな割り算があるのです。

QC言語で、int test[a+b]をしたい

A = 10
B = 40
DIMENSION ENZAN[A+B]

Fortranでは以上のように記述できますが、
Cではどのように記述すれば同じような動作を
得られるのでしょうか?
A+Bのところに、2*A+1やB*B*2など頻繁に使用します。
ご回答よろしくお願いします。

Aベストアンサー

いきなり前提から否定するようで恐縮ですが, Fortran でも本来そのようには書けないんじゃありませんでしたっけ. 実行文の後に宣言文が来るのはアウトだったはず.
A や B に parameter 属性が付いていればできる (とはいえ構文は違う) けど....
本題は #1 の通り. あるいはポインタにして malloc あたり (Fortran でいうところの allocatable 属性と allocate 文).


人気Q&Aランキング

おすすめ情報