PDA

نسخه کامل مشاهده نسخه کامل : به دست آوردن عدد اول



Evil Boy
17-08-2006, 17:01
می خوام یک تابع بنویسم که یک عدد صحیح را بگیرد اگر عدد صحیح اول بود مقدار 0 و در غیر اینصورت مقدار 1 را به ما بدهد
اگر کسی می دونه لطفا به من کمک کنه

Payman_62
17-08-2006, 19:38
سلام.
خودت بنویس هر جا مشکل داشتی این جا مطرح کن.

Evil Boy
18-08-2006, 17:59
نمی دونم چجوری باید اعداد اول رو معرفی کنم

Payman_62
19-08-2006, 01:39
سلام.
عدد اول عددیه که به فقط به خودش و 1 بخش پذیر باشه. عدد مورد نظرتو به اعداد کوچکتر از خودش تو یه حلقه تقسیم کن و اونا که بخش پذیرن رو بشمار. اگه 2 تا بودن اوله اگه بیشتر بود اول نیست. شما اینو بنویس بذار این جا خیلی کارا میشه برای بهبود الگوریتمش کرد. مثلا به عدد رو به کل اعداد کوچکتر تقسیم نکنی. از یک تا نصف عدد. یا عدد زوج بود غیر 2 اول نیست و ... .

Evil Boy
19-08-2006, 10:15
آقا پیمان من یک مبتدیم که تازه دارم برنامه نویسی یاد می گیرم
حالا برا اون سوال بالایی یه کد نوشتم ولی ارور می ده می شه ایرادش رو بگی
Private Function hamid(p As Integer) As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer
For c = a To b
If a \ b Then
c = a Mod 0 Or 1
p = a
End If
Next c
hamid = p
End Function

ممنون

Evil Boy
19-08-2006, 12:44
یکی به من بگه چجوری کدی بنویسم که اعداد اول رو به من نشون بده :blush:

Evil Boy
19-08-2006, 17:07
یکی کمک کنه لطفا

*Batman*
19-08-2006, 18:15
سلام .
اين برنامه يه عدد ميگيره و ميگه اوله يا نه.چون عجله داشتي سريع نوشتم.
خيلي ساده ست.
يه Command و يه Text رو فرم بذار و برنامه رو كپي كن.

اميدوارم به دردت بخوره.


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

البته پيمان عزيز الگوريتم برنامه رو خيلي ساده و روان توضيح داد.

Payman_62
21-08-2006, 00:24
سلام.
T>2 تو شرط if باید به T>1 تغییر کنه تا درست کار کنه. چون تا نصف عدد تقسیم میکنه و به خود عدد نمیرسه. پس اگه بعد از 1 به یه عدد دیگه بخش پذیر باشه اول نیست. این جوری 9 رو میگه اوله.

behnaam
21-08-2006, 02:19
:thumbsup: به به چه جالب من تو vb.net این برنامه رو نوشته ام.عضو شدم که اینو برات بنویسم

behnaam
21-08-2006, 02:28
اینو بگیر یه فرم می خواد و یه دکمه با یه تکست باکس . اسم تکست باکسو عوض نکن بعد تو روال کلیک دکمه ات اینو تایپ کن
Dim N, X, i, primnum As Decimal
Dim ISprime As Boolean

N = TextBox1.Text
X = sqrt(N)
ISprime = True
If N = 2 Then
MsgBox("خره! مسخره کردی؟ معلومه که اوله", MsgBoxStyle.OKOnly, "چهههههه؟")

Exit Sub
End If
If (N Mod 2) = 0 Then 'اعداد زوج هیچگاه اول نیستند بجز 2
ISprime = False
MsgBox("خیر این عدد اول نیست")
Exit Sub
End If

If ISprime = True Then
For i = 2 To X
If (N Mod i) = 0 Then
ISprime = False
Exit For
End If
Next (i)
If ISprime = True Then
MsgBox("بله این عدد اول است")
Else
MsgBox("خیر این عدد اول نیست")

End If
End If
بعد از اجرا...عددت رو تو تکست باکس مینویسی و دکمه رو می زنی اگه عددت خیلی بزرگ باشه طول میکشه.

behnaam
21-08-2006, 02:43
یا اگه از 1 تا جذر اون عدد هم تقسیم کنی میشه ...مثل همون کاری که من کردم (خودت فکرش رو بکن تو عددای بزرگ جذر چقدر کارایی الگوریتمو افزایش میده!
حتی طبق یک تعریف دیگر از عدد اول:عددیست که بر هیچ یک از اعداد اول قبل از خود بخشپذیر نباشد!
این به درد کارایی میخوره که بخوای پرپایه یه لیست موجود کارتو ادامه بدی

A_M_IT2005
21-08-2006, 02:53
سلام به همگی
خسته نباشید
فکر کنم این الگوریتم بهتر و درست تر باشه.
اگه عدد اول نباشه هم می گه اول نیست و هم اولین عددی رو که به اون بخشپذیر معلوم میکنه.

Private Sub Command1_Click()
Dim a As Double, c As Double
a = Val(Text1.Text)
c = 2
Do While c * c <= a
If a Mod c = 0 Then
Print "aval nist" + vbCr + "be " + CStr(c) + " bakhshpazir ast."
Exit Do
End If
c = c + 1
Loop
If c * c > a Then Print "aval hast"
End Sub

موفق باشید

behnaam
21-08-2006, 14:05
به نظرم الگوریتم من بهتر باشه چون تو الگوریتم شما در هر دور حلقه باید c^2 حساب بشه :biggrin:
حالا یه سئوال:موقعی که برنامه در حال محاسبات سنگینی مثل پیدا کردن اعداد اول 1 تا 1000000 هست. فرم برنامه ام قفل میشه و با فشار دکمه stop روال مربوط به اون که می بایست محاسبات رو نیمه کاره پایان بده اجرا نمیشه تازمانی که محاسبات خودشون تموم بشن! راه حلی نیست که (حلقه ها) انقدر مخ cpuرو کار نگیرن؟یا بشه به هر فرمان یک مقدار مشخصی از زمان پردازنده رو داد؟ :worried:

*Batman*
25-08-2006, 01:41
سلام.
T>2 تو شرط if باید به T>1 تغییر کنه تا درست کار کنه. چون تا نصف عدد تقسیم میکنه و به خود عدد نمیرسه. پس اگه بعد از 1 به یه عدد دیگه بخش پذیر باشه اول نیست. این جوری 9 رو میگه اوله.

سلام.

اگه بگيم T>=2 چطوره؟

Payman_62
25-08-2006, 01:55
به نظرم الگوریتم من بهتر باشه چون تو الگوریتم شما در هر دور حلقه باید c^2 حساب بشه :biggrin:
حالا یه سئوال:موقعی که برنامه در حال محاسبات سنگینی مثل پیدا کردن اعداد اول 1 تا 1000000 هست. فرم برنامه ام قفل میشه و با فشار دکمه stop روال مربوط به اون که می بایست محاسبات رو نیمه کاره پایان بده اجرا نمیشه تازمانی که محاسبات خودشون تموم بشن! راه حلی نیست که (حلقه ها) انقدر مخ cpuرو کار نگیرن؟یا بشه به هر فرمان یک مقدار مشخصی از زمان پردازنده رو داد؟ :worried:
سلام.
در حلقه یه Doevents بذار.


سلام.

اگه بگيم T>=2 چطوره؟
T>=2 با T>1 برای اعداد صحیح فرق نمیکنه.
البته میدونم که میدونی.