ahmed.o.mohamed

اختبر قدراتك في C/CPP - الحلقة الخامسة, الجزء الثالث

8 ردود في هذا الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

الحلقة الثانية - الجزء الرابع.

الحلقة الثانية - الجزء الخامس.

الحلقة الثانية - الجزء السادس و الأخير.

الحلقة الثالثة - الجزء الأول.

الحلقة الثالثة - الجزء الثاني.

الحلقة الثالثة - الجزء الثالث.

الحلقة الثالثة - الجزء الرابع.

الحلقة الثالثة - الجزء الخامس و الأخير.

الحلقة الرابعة - الجزء الأول.

الحلقة الرابعة - الجزء الثاني.

الحلقة الرابعة - الجزء الثالث.

الحلقة الرابعة - الجزء الرابع.

الحلقة الرابعة - الجزء الخامس.

الحلقة الرابعة - الجزء السادس.

الحلقة الرابعة - الجزء السابع.

الحلقة الرابعة - الجزء الثامن.

الحلقة الرابعة - الجزء التاسع.

الحلقة الرابعة - الجزء العاشر.

الحلقة الرابعة - الجزء الحادي عشر.

الحلقة الرابعة - الجزء الثاني عشر.

الحلقة الرابعة - الجزء الثالث عشر.

الحلقة الرابعة - الجزء الرابع عشر.

الحلقة الرابعة - الجزء الخامس عشر.

الحلقة الرابعة - الجزء السادس عشر.

الحلقة الرابعة - الجزء السابع عشر.

الحلقة الرابعة - الجزء الثامن عشر.

الحلقة الرابعة - الجزء التاسع عشر.

الحلقة الرابعة - الجزء العشرون و الأخير.

الحلقة الخامسة - الجزء الأول.

الحلقة الخامسة - الجزء الثاني.

مرحبا بكم إخوتي الكرام في الجزء الثالث من الحلقة الخامسة من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الخامسة إلى عدة أجزاء, مُرتبة حسب الصعوبة.

أجزاء هذه الحلقة ستكون خاصة بمتفرقات C/C++.

الإختبار الخامس (الجزء الثالث) :

اكتب برنامج يطلب من المستخدم إدخال عدد صحيح موجب (n) ثم يُظهر أول n أعداد أولية.

مثال :

post-219439-027751600 1348319495_thumb.p

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من الذي يقترب من الأعداد الأولية ؟؟؟laugh.giflaugh.giflaugh.gif

معظم دراستي السرية في الأشهر الماضية كانت عن الأعداد الأولية...

وأظنني وصلت فيها في النهاية إلى طريق مسدود ... حيث قمت باستغلال كل الإمكانيات ... ووصلت إلى أقصر الأكواد وأقصر الخوارزميات المعروفة حتى الآن ....

وإليك هذا الحل من أقصر الحلول التي كتبتها ...

أرجو أن ينال إعجابك ....


#include<stdio.h>
main()
{
int q=1,j,i=3,p[100001]={0,2};
for(;i<1299711;i+=2)
{
for(j=1;i>p[j]*p[j]&&i%p[j];j++);
if(i<p[j]*p[j])p[++q]=i;
}
printf("Enter Number : ");
scanf("%i",&j);
for(int a=1;a<j;a++)
{
if(a%10==0)putchar(10);
printf("%u\t",p[a]);
}
return 0;
}

ومن لديه خوارزميات أسرع أرجو أن يعلمني فوراً فلقد وصلت إلى طريق مسدود في تسريع الخوارزمية ...

والسلام عليكم

___________________________________________

حتى أعطيك فكرة عن الفرق بين هذه الخوارزمية ( وهي من صنعي بشكل نقي والحمد لله)

استغرقت 0.43s من أجل الرقم 3000 يعني مثل الدخل عندك والفرق حوالي 20 ضعف ...

والله ولي التوفيق وله الحمد والشكر

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

محاولتي :

#include <stdio.h>
#include <stdlib.h>
#define VRAI 1 /* pour simuler des ...*/
#define FAUX 0 /* ... valeurs "logiques" */

int main() {
unsigned n, /* nombre d'entiers à considérer */
* raye, /* pointeur sur tableau servant de crible */
prem, /* dernier nombre premier considéré */
i;
int na; /* compteur de nombres premiers affichés */
/* lecture du nombre d'entiers à considérer et
* allocation dynamique du tableau correspondant */
do {
printf("combien d'entiers voulez-vous examiner : ");
scanf("%u", &n);
raye = (unsigned *) malloc((n + 1) * sizeof (unsigned));
if (raye == NULL)printf("** mémoire insuffisante ");
} while (raye == NULL);
/* initialisations du crible */
for (i = 1; i <= n; i++) /* mise à "zéro" du crible */
raye[i] = FAUX;
raye[1] = VRAI; /* on raye le nombre 1 */
/* passage au crible */
prem = 1;
while (prem * prem <= n) {
while (raye[++prem] && prem < n) {
} /* recherche premier nb prem non rayé */
for (i = 2 * prem; i <= n; i += prem) /* on raye tous ses multiples */
raye[i] = VRAI;
}
/* affichage résultats */
printf("entre 1 et %u les nombres premiers sont :\n", n);
na = 0;
for (i = 1; i <= n; i++)
if (!raye[i]) {
printf("%7u", i);
if (++na % 10 == 0)
printf("\n");
/* 10 nombres par ligne */
}
return 0;
}

إليك هذا الحل من أقصر الحلول التي كتبتها ...

خوارزمية جيدة, بارك الله فيك :)

استغرقت 0.43s من أجل الرقم 3000 يعني مثل الدخل عندك والفرق حوالي 20 ضعف ...

ليس 20 ضعف أخي مصطفى, انظر :

post-219439-016743100 1348327055_thumb.p

الوقت المستغرق في Code::Blocks يعتمد على أشياء كثيرة و لا يُعبر عن تعقيد الخوارزمية بشكل دقيق.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
خوارزمية جيدة, بارك الله فيك

blush.gifblush.gifhappy.gif

ولكن على أي أساس اعتمدت هذا الحجم ؟


raye = (unsigned *) malloc((n + 1) * sizeof (unsigned));

أظن انك اعتبرته رقماً أعظمياً أليس كذلك !؟

ليس 20 ضعف أخي مصطفى

نعم معك حق .. أحيانا أخلط بين تعقيد الخوارزمية وطول وقت التنفيذ ...ثم أعود إلى رشدي laugh.gif

جزاك الله خيرا والسلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أعظمي ؟ نعم !

و لكنه ديناميكي أيضا, لأن الحجز يتم بعد معرفة العدد n :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هذا ما لدي:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{
unsigned long n, sqrt_i, i, j;
int premier;
printf("Entrer N = ");
scanf("%lu", &n);
printf("2\t\t");
n--;
for(i=3; n; i+=2){
premier = 1;
sqrt_i = (unsigned long)sqrt((long double)i);
for(j=3; j<=sqrt_i; j+=2)
if(i%j==0){
premier = 0;
break;
}
if(premier){
printf("%lu\t\t", i);
if((n-1)%5==0)
printf("\n");
n--;
}
}
printf("\n");
system("pause");
}

سريع جدا و لكن عملية الإخراج الى شاشة الكونصول هي التي تأخذ أكثر الوقت

تم تعديل بواسطه khatibe_30
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

محاولتي :


#include <stdlib.h>
int ifPrime(int number)
{
int result = 1;
int count = 0;
int a = 0;
while(a < number)
{
a++;
if(!(number % a))
{
count++;
}
if(count == 3)
{
result = 0;
break;
}
}
return result;
}

int main(int argc, char ** argv)
{
int a = 2;
while(a < 3000)
{
if(ifPrime(a))
{
printf("%d\t",a);
}
a += 1;
}

return 0;
}
#include <stdio.h>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تم منح النقاط للمشاركات المفيدة.

يُغلق.

أراكم في الجزء الرابع من الحلقة الخامسة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .