Let's Learn it Together !

ِAn educational blog from FCIS'2011 students ..

هانتكلم شويه عن الPRIME NUMBERS "الأعداد الأولية" وازاى اعرف ان الرقم دا PRIME ولالأ

اولا يعنى ايه PRIME NUMBER ؟؟؟؟

اه صح هى دى الاجابه فعلا .... ال PRIME NUMBER هو الرقم اللى بيقبل القسمه على نفسه وعلى 1 بس يعنى مابيقبلش القسمه على اى رقم تانى.


مثال لارقام PRIME..

2 - 3 - 5 - 7 - 11 - 13 - 17 - 19 - 23 - 29 - .......................
لو لاحظنا هنا ان كل الارقام ال PRIME ارقام فردية معدا ال 2

كدة عرفنا يعنى ايهPRIME NUMBER وخدنا امثله عليه بس المشكله الى تقابلنا واحنا بنتدرب على PROBLEM SOLVING ان احنا لو مثلا عايزين نعرف اذا كان الرقم PRIME ولا لا ممكن فكرة تيجى فى دماغنا ان احنا نمشى على كل الارقام من ال 1لحد الرقم نفسه ونشوف هو بيقبل القسمه على حاجة غير ال 1 ونفسه ولا لا .....


اوكى دى فكرة سليمه 100% بس دى للارقام الصغيرة تنفع بس لو الرقم كبير شويتين اكيد لو استخدمنا الطريقه دى هاناخد time كتير اوى


عشان كدة طلعت طريقه كدة لذيذة عشان نعرف بيها الرقم دا PRIME ولا لا ومن هنا طلع ال SIEVE ALGORITHM ومن خلال الطريقه دى ممكن نعرف الرقم بمنتهى البساطه هو PRIME ولا لا .....طب ازاى الطريقه دى بتشتغل ؟؟؟؟؟؟؟


الطريقه دى من اسمها SIEVE يعنى تقطيع يعنى ايه برضه مش فاهم ؟؟؟؟؟

طب ناخد مثال عشان نفهم

وعايزين مثلا نعرف ايه هى الأرقام ال PRIME بين ال 1 وال 16 ؟؟؟؟؟؟
قبل مانبدا لازم نكون عرفين طبعا ان ال 1 مش PRIME واى رقم اصغر من ال صفر مش prime
طب عرفنا خلاص وبعدين .....


بصو طريقه عمل ال ALGORITHM ان احنا بنقسم الارقام بتاعتنا كدة

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16
طبعا قلنا ال 1 مش PRIME هانبدا من اول 2 .... ال 2 PRIME .... لو لاحظنا كدة ان ال 4 6 8 10 12 14 16 مش PRIME طب لو ركزنا شويه كدة هانلاقى ان دول مضاعفات ال 2 يعنى نفهم من كدة ايه ؟؟؟؟

ان اى رقم PRIME مضاعفاته مش PRIME طب مين قالك ياعم ان كلامك صح ..... طب تعالو كدة نجرب رقم تانى مثلا ناخد رقم 3 ونشوف مضاعفات ال 3 هيا 6 9 12 15

طبعا الكلام ده صحيح .... لأن مضاعفات العدد هتبقى بتقبل القسمة على العدد ده يعنى مضاعفات ال 3 بتقبل القسمة على ال3 ومضاعفات ال 2 بتقبل القسمة على ال2 ومضاعفات ال 5 وال 7 وال 11 و هكذا


طيب نعرف من هنا ايه بقى نشوف كدة الارقام الى عرفناها لغايه دلوقتى من 1 ل 16 هانلاقى ان ال

2 is PRIME and (4,6,8,10,12,14,16) Aren't PRIME
3 is PRIME AND (6,9,12,15) Aren't prime


طب هانيجى عند رقم 4 وهو مش PRIME لأنه من مضاعفات ال 2

نيجى على اللى بعده عند رقم 5 PRIME يبقى نطبق عليه نفس الحكايه الى هيا مضاعفاته مش PRIME
طب مضاعفات ال 5 ايه .....هانلاقيها 10 و 15


طيب ال 10 وال 15 خدناهم قبل كدة خلاص مش مشكله

وهكذا نفس الحكايه مع ال 7 وال11وال 13


نيجى بقى لفكرة الكود بتاعنا

احنا بنستخدم BOLeEaN ARRAY يعنى اللى فيها TRUE OR FALSE وكل مكان فى فيها بيعبر عن رقم ال INDEX يعنى
ARRAY[13]بتعبر عن الرقم 13


احنا بنفرض ان كل الارقام الى عندنا PRIMEيعنى من 1 ل 16 برايم ونملى الا ARRAY كلها true


وبعدين بقى بنمشى من 2 الى هو اول رقم PRIME لحد الجذر بتاع ال LIMIT الى هو16

ليه بقى عشان وحنا فوق لاحظنا ان ان احنا محتاجين بس ان احنا نعرف مضاعفات الارقام ال PRIMEعشان نقول انها مش PRIME يعنى 2 مضاعفاتها 4 6 8 10 12 14 16 وال 3 مضاعفتها 6 9 12 15 وال 5 مضاعفتها 10 15 وال 7 مضاعفتها 14 واحنا خدناها مع مضاعفات ال 2 وال 9 مضاعفتها 18 واحنا اكبر رقم عندنا 16 وهكذا عشان كدة وقفنا لحد ال 4

,وكمان لو ضربنا 4 * 4 = 16 يعنى اكبر رقم عندنا ... لو رحنا لل 5 ... 5*5 = 25 يعنى اكبر من أكبر رقم عندنا اللى هو 16 يعنى احنا مش محتاجينه توفيرا للوقت والمجهود

الكلام ده كله احنا مش بنحتاج نعمله غير مرة واحدة بس فى أول البرنامج وبعدين طول البرنامج بنستخدم ال ARRAY بتاعتنا

كدا مش فاضل الا ان احنا نختار الرقم الى عايزين نشوف هو PRIME ولا لا



هاندخل الرقم ونعمل عليه CHECK لو الماكان بتاعه فى الا اراى ب ture يبقى PRIME لكن لو مش true يبقى للاسف مش
PRIME والعملية كده بتتم فى خطوة واحدة ومش بتاخد تايم خالص
هو التايم اللى فى الاول لما بملى الاراى وبعد كده خلاص


الكود شوفوه من هنا

دى لينكات بعض المسائل الى على ال PRIME يلا بقى الى شايف انو فهم منى يروح يجرب يحلهم :D:D:D




8 comments:

thnxx gedaaan 3ala el maghod el gamed da :):)

thx bgd 3al effort da gazak Allah kol 5eer

السلام عليكم و رحمه الله و بركاته

أحنا ممكن نثبت أنه أي رقم
prime
مضاعفته مش
prime
عن طريق حركه سهله جدا

let N be a Prime digit
in sieve algorithm each number we know that its prime we iterate over its multiples making them to false value or any value unlike the prime ones

so every multiple will be divide on N and the Multiple so not Prime :)

for(int i=N;i < Array_Length;i+=N)
{
arr[i]=False;
}

each new number is consist of i= i + N
in first iteration i=N
then
i= N+N= (2)(N) <<<< New Number Cant Be Prime divisible by 2 and N

with iteration Multiples values will only occur

i= (m)(N) so Digit i divisible by m and N
even if m=n digit will be divisible by n,n^2

can't Be Prime :)

شكرا لمجهوداتكم و جزاكم الله كل خير

actully lettel enhancment

for(int i=N*N;i < length ; i+=N)
{
}

first iteration
i = N*N + N = N(N+1) same way divisble by N+1 , N

Second iteration*

first is div. by N,N^2

sorry for this editing :D

but those ideas good only for saving time
what about numbers of high limits
such as n=2^63-1
we will have run time error not time limit exceds
:D

hiii ...naice walla ,عندي سؤال شلون نختبر الرقم 4 مثلا لو عندنا مضاعفات الرقم 3 نقدر نختبره بسرعه يعني15اذا جمعنا الخمسه والواحد بيطلع 6يعني هاي من مضاعفات الرقم ثلاثه بس انا ابي اعرف شلون نختبر الرقم 4 بليييييييييييز

الرقم 4 ده رقم زوجى, وبالتالى احنا مش محتاجين نختبره أصلا, لأن أى رقم زوجى اكيد مش أولى

Post a Comment