بعضی جاها که دوره های آموزش برنامه نویسی و غیره وجود داره خیلی این نوع سوال پرسیده میشه که ریاضی چقدر توی برنامه نویسی کاربرد داره؟ اصلا کاربرد داره یا نه؟ کجاش کاربرد داره؟

خود من عقیده ام این بود که توی هوش مصنوعی کاربرد داره ولی واقع توی نرم افزار چه کاربردی میتونه داشته باشه؟ الان من یه سایت که میزنم جاییش از ریاضی استفاده میکنم؟ پس توی نرم افزار ریاضی هیچ کاربردی نداره.
کدای این مقاله به زبون جاوا اسکریپتن ولی سعی کردم روش هارو توضیح بدم که اگه خواستید خودتون پیادش کنید
تا اینکه یه روز به سرم زد مسائل ماتریس رو با برنامه نویسی حل کنم، یعنی چند تا ماتریس تعریف کنم بعد جمع و ضرب و دترمینان و غیره رو روشون اعمال کنم. اولش یه تابع بود نمیدونم چطور شد کارش رسید به یه pwa که اینجا میتونید ببینیدش:
چند وقت بعدش قضیه جالب تر شد، چون به سرم زد مسائل ریاضیات گسسته و باقیمانده اعداد بزرگ رو با برنامه نویسی حل کنم :)
اولش که گفتم خب من باقیمانده هر عددی رو بخوام به یه عدد دیگه میام از اپراتور % استفاده میکنم، دیگه این مسائل به چه دردی میخوره؟ ولی وقتی تست کردم تازه فهمیدم که نه، با وجود این همه پیشرفت توی کامپیوتر بازم محاسبات نیاز به دونستن ریاضی داره، حداقل برای برنامه نویسایی که قراره نرم افزار انجام محاسبات رو بسازن.
خب حالا مسئله چی بود؟ من میخواستم رقم یکان 7 به توان 1402 به علاوه 2023 رو بدست بیارم، یه چیزی تو این مایه:
((7 ** 1402) + 2023) % 10
ولی همون اول که توان رو زدم infinity برگردوند، چون جاوا اسکریپت اعداد خیلی بزرگ رو محاسبه نمیکنه و اینفینیتی میده، پس این مسئله مارو حساب نمیکنه و اینجاست که باید قوانین ریاضی رو بریزیم تو برناممون.
میدونید که برای حل این مسئله از قضیه همنهشتی استفاده میشه توی ریاضیات گسسته، یعنی اول باقیمانده 7 به توان 1402 به 10 بررسی میشه و بعدم باقیمانده 2023 توی تقسیم به 10. رقم یکان 2023 که مشخصه، ولی اون عدد بزرگه کار رو مشکل میکنه که میایم یه توانی از 7 پیدا میکنیم که باقیماندش به 10 یکی از اعداد 1 یا -1 یا 0 بشه، چون اینا به توان هر عددی خودشون یا قدر مطلق خودشونن، دیگه بعدش مسئله تقریبا حل شده.
خب پس توی این مسئله اون توانی که باقیماندش اون سه تا عدد باشه 2 هست چون 7 به توان 2 میشه 49 که با -1 هم باقیماندس. پس عدد 7 به توان 1402 هم با -1 هم باقیمانده میشه. پس جواب کل میشه جمع 3 و -1 که برابره با 2. خب حالا همین رو باید وارد برنامه میکردم که بجای اپراتور % بیاد با قضیه همنهشتی مسئله رو برامون حل کنه که به این شکل شد:
// simple remainder function remainder(num, m) { return num % m } // check the number is even or odd function isEven(num) { if (num % 2 === 0) return true else return false } // returns a power such that the remainder of a number with this power over m is 1, -1, or 0 function rtnPower(num, power, m) { let p = power let r = remainder(num ** power, m) for (let i = 1; i < power; i++) { if ((remainder(num ** i, m) === 1) || (remainder(num ** i, m) === m - 1)) { p = i r = remainder(num ** i, m) === 1 ? 1 : -1 break } else if (remainder(num ** i, m) === 0) { r = 0 break } } return [p, r] } function power(num, power, m) { let which = rtnPower(num, power, m) let newR = isEven(Math.floor(power / which[0])) ? Math.abs(which[1]) : which[1] // check if power is even let mainR = newR * (num ** remainder(power, which[0])) // result return mainR } export default power
حالا طبق توضیحات جواب مسئله این میشه
power(7, 1402, 10) + power(2023, 1, 10)
ببخشید اگه نامگذاری ها یکم نامفهومه چون سریع نوشتم وقت رو نام گذاری نذاشتم :)
خب دیگه تهش به این نتیجه رسیدم که ریاضی توی نرم افزار های محاسباتی و الگوریتم ها و رسم اشکال با برنامه نویسی کاربرد اونچنانی داره وگرنه توی توسعه و ساخت نرم افزار های معمولی مثل فروشگاه و بلاگ و غیره نیازی به ریاضی قوی نیست و بیشتر تجربه و مهارت مهمه. البته اینم باید درنظر گرفت که هر چی ریاضی قوی تر باشه مهارت حل مسئله بیشتره و هم مسائل برنامه نویسی و هم مسائل روزمره رو بهتر میشه مدیریت کرد. این رو هم باید توجه داشت که بعضی از برنامه نویسای حرفه ای اول ریاضی خونده بودن و بعد برنامه نویس شدند مثل رایان دال سازنده nodejs.
یه چیزی رو هم یادم رفت بگم اینکه چون جاوا اسکریپت اعداد بزرگ رو نمیشناسه مجبوریم از همنهشتی استفاده کنیم وگرنه توی پایتون حتی رقم دقیق 7 به توان 1402 رو میده بهمون که با همون % میتونیم جواب رو حساب کنیم.