2011-05-23 5 views
8

में दो पूर्णांकों को सम्मिलित करें गणित 7 में दो सकारात्मक पूर्णांक को संयोजित करने का सबसे प्रभावी तरीका क्या है?गणित 7

cc[123, 4567] >>1234567

के बारे में क्या दो से अधिक?

cc[123, 4, 567, 89] >>123456789

उत्तर

8

यह कई पूर्णांकों के लिए थोड़ा तेज हो जाएगा, अपने पिछले समाधान की तुलना में:

ToExpression[StringJoin @@ Map[IntegerString, {##}]] & 

एक अधिक संक्षिप्त विकल्प एक भी तर्क स्वीकार करने के लिए है, यह मानते हुए कि एक सूची होने के लिए, बजाय है संख्या का एक अनुक्रम, श्रेणीबद्ध करने के लिए:

[email protected]@[email protected]#& 

जो IntegerString जा रहा है Listable पर आधारित है।

3

यह केवल कम पूर्णांकों के लिए ठीक से काम करता है क्योंकि उत्पादन मशीन आकार में होना चाहिए, लेकिन यह सबसे तेजी से मैंने पाया है:

Compile[{{a, _Integer}, {b, _Integer}}, 
    b + a 10^Floor[1 + Log[10, b]] 
] 

अब पूर्णांकों के लिए, सबसे तेजी से मैं कर सकता लगता है:

FromDigits[{##}, 10^[email protected]#2] & 

कई पूर्णांकों श्रृंखलाबद्ध के लिए, निम्न में से एक पर तेजी से Fold से था इसके बाद के संस्करण:

FromDigits[Join @@ IntegerDigits[{##}]] & 
+0

मेरे समय में संकलित समारोह में 'इंटीजर लम्बाई [बी] 'का उपयोग' मंजिल [...] 'के उपयोग से 20 गुना तेज है। –

+0

@Sjoerd, क्या संस्करण 8 में है? –

+0

@ श्री विज़ार्ड 'फोल्ड' धीमा है क्योंकि यह लंबे एरे के लिए बहुत बड़े लोगों द्वारा छोटे पूर्णांक गुणा करने के समाप्त होता है। विभाजन और जीत का उपयोग करके आप 2 गति का कारक प्राप्त कर सकते हैं: 'साफ़ करें [सीसी 4]; सीसी 4 [{i_}]: = i; सीसी 4 [{i1_, i2_}]: = प्रेषक [{i1, i2}, 10^इंटीजर लम्बाई [i2]]; सीसी 4 [x_List]: = के साथ [{के = कोटिएंट [लंबाई [x] + 1, 2]}, सीसी 4 [{सीसी 4 [[एक्स, के] ले लो], सीसी 4 [ड्रॉप [एक्स, के]]}]] ' । – Sasha