PDA

View Full Version : خاصیت این اعداد در تولید اعداد تصادفی



ehsan_system
شنبه 17 آذر 1386, 14:16 عصر
سلام .
این تابع برای تولید اعداد تصادفیه :


int random(int n)
{
static long seed=1;
seed=3645651*seed+237457;
return seed%n;
}


میخواستم بدونم کسی میدونه خاصیت این دو عدد چیه ؟

emad_67
یک شنبه 18 آذر 1386, 11:48 صبح
seed یه آرگمانی هست که برای تولید اعداد تصادفی استفاده میشه در واقع توی این تابع هم یه مقدار اولیه ای داره و بعد از فراخوانی تابع در این خط:


seed=3645651*seed+237457;
به مقداری جدیدی که از عبارت به دست میاد تغییر میکنه و چون seed به صورت static تعریف شده بار دیگه که تابع فراخوانی میشه دیگه مقدار seed برابر 1 نیست و مقدار جدید رو که از فراخوانی قبلی به دست اومده در خودش داره و به همین ترتیب بعد هم مقدار باقیمونده عدد بر n به دست میاد که یه عدد رندوم میشه. ضرورتی هم در استفاده از دو عدد 3645651 و 237457 فکر نکنم باشه چون فقط برای تولید یه عدد تصادفی هستند و میتونن یه اعداد دیگه ای باشن.

ehsan_system
یک شنبه 18 آذر 1386, 15:40 عصر
ممنون آقا عماد .
اما استاد ما میگفت این اعداد خاصیت خاصی دارند و من تو یه سایت دیگه هم که همین الگوریتم رو نوشته بود ، دیدم از همین اعداد استفاده کرده !!!

ehsan_system
دوشنبه 19 آذر 1386, 09:54 صبح
دوستان ، فکر کنم استادم نکته انحرافی گفته :عصبانی++:
همونطور که آقا عماد گفتند اگه به منطق تابع نگاه کنیم بجای این دو عدد هر عدد دیگه ای میتونه باشه .

بازم از آقا عماد متشکرم .:لبخند: