作者yauhh (喲)
看板C_and_CPP
標題Re: [問題] 懇請協助設計C語言程式
時間Sat Oct 30 16:27:25 2010
※ 引述《ksjksj (法輪大法好)》之銘言:
: f(n)=(a+1)^n-(a)^n必為奇數,a,n為自然數
: a=1,...1000
: n=1,...1000
: 這個問題我想了兩週
: 網路上也沒有現成的程式碼可套用
: 懇請高手協助 不勝感荷
相較於一般計算是直接把f(n)求出來,在檢查奇數時,
會把所有的計算過程全都轉換為奇數檢查過程,
也就是說:
odd_f(n) = odd_sub(odd_expo(a+1, n), odd_expo(a, n))
指數計算的奇數檢查有三條規則:
1. 奇數的任何次數為奇數, 偶數的任何次數為偶數.
2. 任何數的 0 次為奇數.
3. 0 的任何次數為偶數.
int odd_expo(int a, int b) {
if (b == 0)
if (a == 0) {
printf("0^0 not determined.\n");
exit(0);
} else return 1;
if (a == 0) return 0;
return (a % 2 != 0);
}
加減法的檢查,二個數中只能有一個奇數,才會得到奇數:
int odd_sub(int o_a, int o_b) {
return ((o_a != 0 && o_b == 0) || (o_a == 0 && o_b != 0));
}
然後,主程式測測 a=1..1000, n=1..1000 的答案:
int main() {
int a, n;
int result = 1;
for (a=1; a<=1000; a++) {
for (n=1; n<=1000; n++) {
int t = odd_sub(odd_expo(a+1, n), odd_expo(a, n));
result = result && t;
}
}
if (result != 0)
printf("For all a=1..1000, n=1..1000, f(a,n) = (a+1)^n - a^n"
" is odd.\n");
else
pritf("Nil.");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.160.214.181
※ 編輯: yauhh 來自: 218.160.214.181 (10/30 17:37)
→ tropical72:0之任意次方為奇數?是我記錯嗎? 10/30 17:51
→ tropical72:f(n) = 0^n, n>0=>f(n)=0, n<=0 => f(n)無義 ?? 10/30 18:20
→ yauhh:0^1是幾? 0^2是幾? 10/30 18:26
推 zerodevil:你沒記錯. 10/30 18:27
ok,改過了
※ 編輯: yauhh 來自: 218.160.214.181 (10/30 18:29)
→ tropical72:0^1=0, 0^2=0, 所以好奇您文中說的0之任何次方為奇數 10/30 18:36
→ tropical72:抱歉,樓上推文慢了.誤會一場.. 10/30 18:37
→ yauhh:對啊,我覺得小地方不用吵,弄錯了改一下就好了 10/30 18:41
推 csihcs:指數計算說明有兩個小瑕疵,2 應改為任何非0的0次方為1 10/30 22:48
→ csihcs:3 0的非0次方為0,會比較恰當,因為0的0次方數學上是無意義 10/30 22:49
→ tropical72:y大只是大致說明而已,0的任何小於等於0次方都是無意 10/30 22:56
推 csihcs:恩恩~~~謝謝指教 m(_@_)m 10/30 22:58