الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العدد الاولي الاقرب الى العدد k

مغلق
بدأه hicham716 في 15 أبريل 2007 · 14 رد · 2,843 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

المطلوب كتابة الجورثم يحدد العدد الاولي الاقرب الى العدد k

اذا كانت k=3 فان العدد الاولي المطلوب هو 3

اذا كانت k=6 فان العدد الاولي المطلوب هو 5 و7

اذا كانت k=22 فان العدد الاولي المطلوب هو 23

اذا كانت k=24 فان العدد الاولي المطلوب هو 23

المهم اقرب عدد اولي الى العدد k

العدد الاولي هو الذي لا يقبل القسمة الا على نفسه و على واحد

______________________________________________

" حَافِظُوا عَلَى الصَّلَوَاتِ وَالصَّلاةِ الْوُسْطَى وَقُومُوا لِلَّهِ قَانِتِينَ "

______________________________________________

تحرير بواسطة 'بنهاشم منصوري'

#3
function test(n:longint):boolean;
var nbr,i:longint;
begin
nbr:=0;
test:=false;
for i:=1 to n  do
if n mod i=0 then
nbr:=nbr+1;
if nbr=2 then test:=true;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var done:boolean;
	n,i:longint;
begin
n:=strtoint(edit2.text);
done:=false;
i:=0;
repeat
if ((n-i)>0)and test(n-i) then edit1.Text:=inttostr(n-i);
if  test(n+i) then edit1.Text:=edit1.Text+'*'+inttostr(n+i);
if edit1.Text<>'' then done:=true;
i:=i+1;
until  done;
end;
#4

ههههههههههههههههههههههههههه

13!!!!!!!!!!!

تقصد تاريخ اليوم خطأ اليوم 15avril

المطلوب انك تختار عدد و البرنامج يطلع العدد الاولي الاقرب

______________________________________________

" حَافِظُوا عَلَى الصَّلَوَاتِ وَالصَّلاةِ الْوُسْطَى وَقُومُوا لِلَّهِ قَانِتِينَ "

______________________________________________

تحرير بواسطة 'بنهاشم منصوري'

#5

bachirk مشكور ممكن الكود ب VB او C++

______________________________________________

" حَافِظُوا عَلَى الصَّلَوَاتِ وَالصَّلاةِ الْوُسْطَى وَقُومُوا لِلَّهِ قَانِتِينَ "

______________________________________________

تحرير بواسطة 'بنهاشم منصوري'

#6

لا اعرف البرمجة باللغات التي ذكرتها لكن تستطيع ترجمت الكود

بالتعليمات المقابلة لها في vb

#7

ههههههههههههه فعلا النهاردة 15 مش 13

شكرا علي تصحيح المعلومة

ربنا يوفقكم يا شباب ههههه

#8
hicham716 كتب:

bachirk مشكور ممكن الكود ب VB او C++

الكود واضح ان بلغة الفيجوال بيسك VB

مع تحياتي عبدالله

#9

لا يا عبدالله الكود ليس بلغة الفيجوال بيسك انما واضح الا حد ما

اذا كان بامكانك ترجمته الا لغة الفيجوال بيسك

مشكور

______________________________________________

" حَافِظُوا عَلَى الصَّلَوَاتِ وَالصَّلاةِ الْوُسْطَى وَقُومُوا لِلَّهِ قَانِتِينَ "

______________________________________________

تحرير بواسطة 'بنهاشم منصوري'

#10

الكود بلغة الدالفي

وهو مكون من دالة"function"

واجراءات تضعها في حدث onclick

#11

فجوال باسيك

Private Sub Command1_Click()

k = Val(Text1)

p1 = 0

Do

p1 = p1 + 1

t1 = 0

For i = 2 To Val(k) - 1

If Val(k) Mod Val(i) = 0 Then

t1 = 1

End If

Next i

k = k + 1

Loop Until (t1 = 0)

g = Val(k) - 1

k = Val(Text1)

p2 = 0

Do

p2 = p2 + 1

t2 = 0

For i = 2 To Val(k) - 1

If Val(k) Mod Val(i) = 0 Then

t2 = 1

End If

Next i

k = k - 1

Loop Until (t2 = 0)

y = Val(k) + 1

If p1 = p2 Then

MsgBox g

End If

If p1 < p2 Then

MsgBox g

End If

If p1 > p2 Then

MsgBox y

End If

End Sub

______________________________________________

" حَافِظُوا عَلَى الصَّلَوَاتِ وَالصَّلاةِ الْوُسْطَى وَقُومُوا لِلَّهِ قَانِتِينَ "

______________________________________________

تحرير بواسطة 'بنهاشم منصوري'

#12
bachirk كتب:
function test(n:longint):boolean;
var nbr,i:longint;
begin
nbr:=0;
test:=false;
for i:=1 to n  do
if n mod i=0 then
nbr:=nbr+1;
if nbr=2 then test:=true;
end;

انا شايف انك علشان تختبر إذا كان العدد اولي ولا لأ بتعمل loop إلى ان تصل إلى N-1

فى حاجه اسرع من كده, يكفى انك توقف عند الجذر التربيعى للرقم ( بعد تقريبه لاكبر رقم صحيح )

#13
اقتباس
فى حاجه اسرع من كده, يكفى انك توقف عند الجذر التربيعى للرقم ( بعد تقريبه لاكبر رقم صحيح )

ممكن توضح ..

#14

هناك طريقة اسرع واسرع من n-1 ويمكن أن نفهمها كالتالي بالتفصيل الممل :

إذا كنا نريد اختبار هل 12 عدد أولي أم لا فإننا رياضيا نقسمه على كل عدد أصغر منه فإذا لم نجد ناتج صحيح كان عددا أوليا ولكن لماذا نفعل ذلك , لأننا ببساطة نريد أن نوجد معاملات العدد 12 فاذا لم يوجد معامل له كان 12 عدد أوليا

بالتالي لا يجب أن نقسم 12 على كل الاعداد الاصغر منه بل يكفي أن نقسمه على جميع الأعداد حتى 6 ... لماذا ؟

لأنه يستحيل وجود معامل للعدد 12 أكبر من نصفه (6)

مثال آخر : نريد أن نتحقق هل 34 عدد صحيح لا يجب أن نعد حتى 33 بل نعد حتى 17 فقط

هذه الطريقة ( طريقة العد حتى نصف العدد فقط ) توفر الوقت في الاعداد الكبيرة جدا

وهذا كود بسيط بالفجيوال بيسك

Private Sub Command1_Click()
y = Val(Txt.Text)
For x = 2 To y / 2
If Fix(y / x) = y / x Then
MsgBox "FALSE"
Exit Sub
End If
Next
MsgBox "TRUE"
End Sub

تم تعديل هذه المشاركة بواسطة سلامات في 26 أبريل 2007 في 22:47

#15

اخي سلامات فكرة ذكية

اذا امكن ضع الكود بملف جاهز بالمرفقات

لم افهم فكرتك اخي md_2007

نأخذ 36 مثلا

الجذر التربيعي هو 6

انت تقول حسب مافهمت نتوقف عند 6

اليست 9 و 12 و18 قاسما ل 36

______________________________________________

" حَافِظُوا عَلَى الصَّلَوَاتِ وَالصَّلاةِ الْوُسْطَى وَقُومُوا لِلَّهِ قَانِتِينَ "

______________________________________________

تحرير بواسطة 'بنهاشم منصوري'

هذا الموضوع مغلق.

مواضيع مشابهة