PDA

نسخه کامل مشاهده نسخه کامل : عددای اول زیر 1000



Samba
29-10-2008, 17:01
با سلام

من هر چی می کنم نمیفهمم چطور عددای اول زیر 1000 رو بدست بیارم

اگه کسی میگه با آموزش و توضیح خوب بده

با تشکر

بهرام_62
29-10-2008, 22:05
سلام
اتفاقا من یک برنامه برای این نوشتم
الان برات آپلود می کنم
به کد ها خوب دقت کن
اگر نفهمیدی بگو برات توضیح بزارم
البته توی سیستم خونه ندارمش
توی کامپیوتر سر کاره
شنبه برات می آپم
اگر وقت نداری تا شنبه یک توضیح تقریبی بهت می دم خودت بنویس:

ببین من دو تا تکس باکس گذاشتم
یکی با برچسب"از عدد"
یکی هم با برچسب "تا عدد"
بعد اعداد رو طرف می زنه و اعداد اول بین این دو عدد رو برنامه بهش میده
البته اگر مثلا بزنی از عدد 0 تا 100000 اعداد اول رو در بیار حدود 30 ثانیه ای طول می کشه
برای نوشتن این برنامه:
فرض کن اسم تکس اولی a و اسم تکس دومی b هست
یک حلقه for می زاریم از a تا b
بعد توی این حلقه یک حلقه دیگه می زاریم از 2 تا i (متغیر حلقه اوی)
بعد داخل این حلقه تست می کنیم که آیا i بر هر کدوم از اعداد حلقه بخش پذیره یا نه
آخر حلقه اگر بر هیچ کدوم بخش پذیر نبود بعد توی لیست باکس اضافش می کنیم
به همین راحتی
البته اگه الان این کد رو بزاری چندین تا مشکل می خوری
مثلا این عدد بر خودش بخش پذیره و بنابراین هیچ عددی رو اول تشخیص نمیده
و چندین تای دیگه که الان دقیقا یادم نیست
و چند تا ریزه کاری هم برای بالا بردن سرعت کار داره
که یکیش اینه که اعداد زوج رو الکی تست نکنه چون صد در صد اول نیستن
و
و
و
که الان خوب یادم نیست
برای همین اگر تا شنبه صبر کنی برات خود برنامه رو می زارم
تازه یک کد دیگه هم برای برنامه نوشتم که مقسوم علیه های یک عدد رو لیست می کنه
و می خوام توسعش بده که ب.م.م و ک.م.م دو عدد رو هم بگیره[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

bersam
29-10-2008, 22:23
من دو سال پیش یه فرمولی بدست اوردم اعداد اول زیر 100 رو طبق یه قانون خاص در می آورد ! ولی بعد از 100 جوابش دیگه درست در نمی اومد !!!

اگه اون فرمول رو پیدا کردم می زارم چون در اون صورت دیگه برنامه نویسیش خیلی راحت تر میشه و زمان کمتری رو هم میبره !!!!!

ولی باید بشینم دوباره از اول پیداش کنم !!!!

شکمو
30-10-2008, 20:10
بیا عزیزم اینم کدش:

Dim sum As Integer
For i = 1 To 1000
sum = 0
For j = 1 To i
If i Mod j = 0 Then sum = sum + 1
Next j
If sum = 2 Then Label1.Caption = Label1.Caption & " " & i
Next i


label1 خروجی هست و طرز کارش این طوره که :

یه for از یک تا 1000 می شماره (for اول) for دوم هم از یک تا i و داخل for این اتفاق میفته:

مثلا i = 5 شده

for دوم از 1 تا 5 می شماره و در مرحله ی اول i=1 است و j=1
باقیمانده ی i تقسیم بر j رو حساب میکنه که اگر مساوی صفر شد یک عدد به متغیر sum اضافه میکنه و این حلقه تا آخر یعنی 5 میره و اگر sum = 2 شد اون عدد یعنی i که 5 هست رو به label1 اضافه میکنه.

عدد اول عددی هست که به خودش و یک بخش پذیر باشه یعنی دو عدد پس هروقت sum =2 شد اون رو عدد اول حساب میکنه و به label1 اضافه میکنه.

اگه سوالی بود در خدمتم.

موفق باشی.

bersam
30-10-2008, 21:28
یه سوال !! چه طوری یک رو برداشتی ؟؟؟ چون که 1 عدد اول نیست ! ولی 1 تقسیم بر 1 مساوی 0 میشه ! و طبق برنامه باید 1 رو هم بنویسه ؟

بهرام_62
31-10-2008, 00:47
یه سوال !! چه طوری یک رو برداشتی ؟؟؟ چون که 1 عدد اول نیست ! ولی 1 تقسیم بر 1 مساوی 0 میشه ! و طبق برنامه باید 1 رو هم بنویسه ؟

سلام
اولا یک تقسیم بر یک میشه 1 نه صفر[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ولی یکی مود یک میشه صفر
اگر به کدی که این دوست عزیز نوشتن دقت کنی می بینی که اگر عدد مربوطه بر دو عدد یعنی یک و خودش بخش پذیر باشه میاد توی لیست
ولی یک فقط بر خودش که همون یکه بخش پذیره
البته فکر کنم اینجوری باشه
___________________________

Dim sum As Integer
For i = 1 To 1000
sum = 0
For j = 1 To i
If i Mod j = 0 Then sum = sum + 1
Next j
If sum = 2 Then Label1.Caption = Label1.Caption & " " & i
Next i
خیلی برام جالب بود
ایول من کلی کد برای یک همچین کاری نوشتم
ولی شما با این کد چند خطه حلش کردی[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته اگر توی یک لیست باکس اضافه بشه خیلی قشنگ تر در میاد
البته من عذر خواهی می کنم
چون بعضا دیدم اینجا همه زود بهشون بر می خوره[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مخصوصا وقتی درباره برنامشون نظری میدی[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته تو که ایشالله اینجوری نیستی[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

شکمو
31-10-2008, 10:13
نه اتفاقا خوشحال شدم نظر دادین.

موفق باشید.

بهرام_62
01-11-2008, 18:23
سلام
اينم برنامه اي كه قولش رو داده بودم
دو تا عدد ورودي مي گيره
اعداد اول بينشون رو ميده
مقسوم عليه هاي يك عدد رو هم اگر خواستين بهتون ميده


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Samba
03-11-2008, 18:14
خيلي ممنون :11:

از اينكه مي بينم انجمن كاربراي فعال زياد داره

دست همتون درد نكنه:40:

موفق باشيد

Samba
03-11-2008, 18:15
راستي نمي تونيم عدداي بيشتر از 1000 رو به دست بيازيم يا نه؟؟؟؟؟

bersam
03-11-2008, 18:53
فکر کنم با این سورس راحت بشه تا هر عددی که لازمه رو بدست آورد !!! فقط کافیه یه تغییر بدین !

For i = 1 To 1000

اون هزار رو به هر عددی که مایل هستین تغییر بدین !!!!


اولا یک تقسیم بر یک میشه 1 نه صفر[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می دونم !!!!:18:
منم منظورم این نبود !!! من منظورم باقیماندش بود !!!! مود هم فکر کنم منظور همون باقی مانده بود دیگه ؟؟؟


اگر عدد مربوطه بر دو عدد یعنی یک و خودش بخش پذیر باشه میاد توی لیست
ولی یک فقط بر خودش که همون یکه بخش پذیره

فهمیدی چی شد ؟؟؟ خودت می گی بر یک و خودش !!!! بعد می گی یک فقط بر خودش بخش پذیره !!! در حالی که یک هم بر یک بخش پذیره هم بر خودش !!!!!!!!

من آخر نفهمیدم !!! اگه میشه یکی یکم شفاف سازی کنه !!!!! کم کم دارم قاط می زنم !

بهرام_62
03-11-2008, 23:37
فهمیدی چی شد ؟؟؟ خودت می گی بر یک و خودش !!!! بعد می گی یک فقط بر خودش بخش پذیره !!! در حالی که یک هم بر یک بخش پذیره هم بر خودش !!!!!!!!

من آخر نفهمیدم !!! اگه میشه یکی یکم شفاف سازی کنه !!!!! کم کم دارم قاط می زنم !
ببین
یک هم بر خودش بخش پذیره هم بر یک
ولی این شرط توی حلقه فقطی بار تکرار میشه

به این دقت کن:
For j = 1 To i
حالا وقتی i یک باشه میشه
For j = 1 To 1
این حلقه فقط یک بار تکرار میشه
و فقطم بخش پذیری یک بر خودش چک میشه(یک بار)
فهمیدی؟

bersam
04-11-2008, 22:28
اوه گرفتم ! سورس جالبی بود !!!!!!

Samba
05-11-2008, 17:20
ايول دمتون گرم

Payman_62
05-11-2008, 20:28
سلام.
البته با 2 نغییر کوچیک میتونیم performance این سورس رو چند برابر کنیم.
اول این که سام که از 2 رد شد معلومه عدد اول نیست. پس بهتره از حلقه خارج شیم. دوم این که تا نصف عدد رو چک کنیم که بخش پذیره یا نه. چون هیچ عددی به از نصف بزرگ تره خودش بخش پذیر نمیتونه باشه.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بهرام_62
06-11-2008, 00:21
سلام.
البته با 2 نغییر کوچیک میتونیم performance این سورس رو چند برابر کنیم.
اول این که سام که از 2 رد شد معلومه عدد اول نیست. پس بهتره از حلقه خارج شیم. دوم این که تا نصف عدد رو چک کنیم که بخش پذیره یا نه. چون هیچ عددی به از نصف بزرگ تره خودش بخش پذیر نمیتونه باشه.
من تو برنامم این قضایا رو گذاشتم[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]