→ ReiFu21:是的 有要考慮 我希望可以鍵入一個值 像是100 如此100以內 06/15 18:54
→ ReiFu21:的值像是你打的17,19,22,27程式都要跑出來 我還沒看懂你的 06/15 18:55
→ ReiFu21:程式 不過我想C大可能認為這種問題無法用邏輯來跑 只能用 06/15 18:56
→ ReiFu21:暴力法來解 因為我也找不出解決這個問題的邏輯 感謝你的程 06/15 18:57
→ ReiFu21:式 我晚上回家再鑽研 06/15 18:57
推 CBET:我指的暴力法就是m大的作法,看來我的表達也不清楚 XD 06/15 19:02
推 ReiFu21:不過你漏掉了 4^2+1^2+1^2=18 可能邏輯上還是不對 06/15 19:02
若您的m, n, k 都要從 1~x 的話,
把剛剛的程式中3的部分換成x即可。
此處的3表示m,n,k是3個的意思
↓
baseX = dec2base(0:x^3-1, x) - '0' + 1;
sumsqr = sort(sum(baseX.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:09)
→ CBET:不過m大的作法只能用在36以內,超過36還需要修改 06/15 19:03
是27吧?
請問您的36是如何來的?
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:10)
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:11)
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:15)
推 CBET:我本來是指 m, n, k 只能到 36,但後來發現其實只能到 10 06/15 19:23
那您的10是怎麼得來的?
我的電腦上 sqrt(realmax/3) 大到 7.7410e+153
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 20:54)
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 20:57)
推 CBET:因為 dec2base(10, 11) 會等於 'A' 06/15 21:28
→ CBET:m大的作法也可用 bsxfun 實現,就不用使用字串 06/15 21:30
謝謝C大,
我沒考慮到進制的表示,
if x >= 2 && x<=36
baseX = dec2base(0:x^3-1, x);
if x > 10
shiftChar = char(size(baseX));
iDigit = ismember(dec2base([0:35], 36), '0123456789');
shiftChar(iDigit) = '/';
shiftChar(~iDigit) = '6';
baseX = baseX - shiftChar + 1;
else
baseX = baseX - '/';
end
sumsqr = sort(sum(baseX.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
else
error(message('MATLAB:dec2base:SecondArg'));
end
以上的code可支援 x = 2~36
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 22:01)
以下的code 可支援正整數的x
num = [0:x^3-1].';
baseX = zeros(length(num), 3)
baseX(:, 1) = floor(num/x^2);
num = rem(num, x^2);
baseX(:, 2) = floor(num/x);
num = rem(num, x);
baseX(:, 3) = num;
sumsqr = sort(sum(baseX.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 22:28)
※ 編輯: mp19990920 來自: 111.67.58.177 (06/15 23:41)