به محفل ریاضی ایرانیان خوش آمدید! لطفا برای استفاده از تمامی امکانات عضو شوید
سایت پرسش و پاسخ ریاضی
+3 امتیاز
99 بازدید
در دبیرستان و دانشگاه توسط A-math-lover (664 امتیاز)

با سلام خدمت تمام کاربران و اساتید محترم سایت محفل ریاضی ایرانیان

آقای @AmirHosein در یکی از پاسخ‌هایشان (در اینجا) فرمولی را به‌دست آوردند که با استفاده از آن می‌توان حاصل‌جمع ارقام یک عدد طبیعی را محاسبه کرد؛ اما آیا برای محاسبهٔ حاصل‌ضرب ارقام یک عدد طبیعی هم می‌توان فرمولی به‌دست آورد؟ اصلاً فرمولی وجود دارد؟

1 پاسخ

+7 امتیاز
توسط AmirHosein (17,822 امتیاز)
ویرایش شده توسط AmirHosein
 
بهترین پاسخ

اکنون که پاسخ پرسش دیگرتان را نگاه کردم متوجه شدم که شکل فرمول پیشین را می‌شد کوچکتر هم کرد. یعنی جمع رقم‌های عدد طبیعیِ $n$ را می‌توان به شکل سمت راست تساوی زیر نیز نوشت.

$$[\frac{n}{10^{[\log_{10}^n]}}]+\Big(\sum_{i=1}^{[\log_{10}^{n}]-1}\big([\frac{n}{10^i}]-10[\frac{n}{10^{i+1}}]\big)\Big)+(n-10[\frac{n}{10}])=\\ \sum_{i=0}^{[\log_{10}^n]}\big([\frac{n}{10^i}]-10[\frac{n}{10^{i+1}}]\big)$$

به همین شکل برای ضرب رقم‌های عدد طبیعیِ $n$ نیز می‌توان نوشت؛

$$\prod_{i=0}^{[\log_{10}^n]}\big([\frac{n}{10^i}]-10[\frac{n}{10^{i+1}}]\big)$$

یک کد میپل هم در زیر برایتان نوشتم که یک عدد طبیعی را می‌گیرد و با کمک فرمول بالا حاصلضرب رقم‌هایش را پس می‌دهد.

prodDigits:=proc(n::posint)::posint;
description "returns the product of digits of the input natural number.";
local i::nonnegint;
return(product(floor(n/10^i)-10*floor(n/10^(i+1)),i=0..floor(log[10](n))));
end proc;

که برای نمونه اگر عدد ۱۲۳ را به آن بدهید یعنی تایپ کنید prodDigits(123); به شما عدد ۶ را می‌دهد. تابع بالا را می‌توانید با جابجا کردنِ product با add به یک تابع برای جمع رقم‌ها تبدیل کنید. یعنی کد زیر.

addDigits:=proc(n::posint)::posint;
description "returns the sum of digits of the input natural number.";
local i::nonnegint;
return(add(floor(n/10^i)-10*floor(n/10^(i+1)),i=0..floor(log[10](n))));
end proc;

حمایت مالی

کانال تلگرام محفل ریاضی
امروز : تاریخ شمسی اینجا نمایش داده می‌شود
...