सी, सी ++, 46 40 37 बाइट्स (# डेफिन), 50 47 46 बाइट्स (फ़ंक्शन)
-1 बाइट Zacharý को धन्यवाद
-11 बाइट्स सीटिंगकैट के लिए धन्यवाद
मैक्रो संस्करण:
#define F(n)n*n*~n*~n/4+n*~n*(n-~n)/6
फ़ंक्शन संस्करण:
int f(int n){return~n*n*n*~n/4+n*~n*(n-~n)/6;}
Thoses लाइनें, थ्रू 2 फॉर्मूले पर आधारित होती हैं:
1 और n = के बीच संख्याओं का योग n*(n+1)/2
योग बीच वर्गों का योगn*(n+1)*(2n+1)/6
तो उत्तर पाने का सूत्र मात्र है (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6
और अब बाइट काउंट को "ऑप्टिमाइज़" करने के लिए, हम कोष्ठक को तोड़ते हैं और सामान को चारों ओर घुमाते हैं, करते हैं जबकि परीक्षण हमेशा उसी परिणाम को देता है
(n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6 =>
n*(n+1)/2*n*(n+1)/2 - n*(n+1)*(2n+1)/6 =>
n*(n+1)*n*(n+1)/4 - n*(n+1)*(2n+1)/6
पैटर्न पर ध्यान दें p = n*n+1 = n*n+n, इसलिए फ़ंक्शन में, हम एक और चर घोषित करते हैंint p = n*n+n और यह देता है:
p*p/4 - p*(2n+1)/6
के लिए p*(p/4-(2*n+1)/6)और इसलिएn*(n+1)*(n*(n+1)/4 - (2n+1)/6) , यह आधे समय ही काम करता है, और मैं संदिग्ध पूर्णांक विभाजन कारण (होने के लिए f(3)24 के बजाय 22 दे,f(24) 85100 के बजाय 85,200 दे रही है, तो हम कर सकते हैं खंड करना मैक्रो के सूत्र नहीं कि जिस तरह से है, भले ही गणितीय यह है वही।
मैक्रो प्रतिस्थापन के कारण मैक्रो और फ़ंक्शन दोनों संस्करण यहां हैं:
एफ (3) 3*3*(3+1)*(3+1)/4-3*(3+1)*(2*3+1)/6 = 22
एफ (5-2) देता है5-2*5-2*(5-2+1)*(5-2+1)/4-5-2*(5-2+1)*(2*5-2+1)/6 = -30
और ऑपरेटर पूर्वता के साथ गड़बड़ करता है। फ़ंक्शन संस्करण में यह समस्या नहीं है