أرجو من الأخوة المشرفين نقل الكود إلى قسم المسابقات .. فلا يمكنني الدخول إليه لأسباب أمنيّة :p
//الحمد لله :)//هذا من فضل ربي#include<iostream>#include<cmath>bool *primes=new bool[1000000];//sieve of eratothenesesunsigned powersOfTen[]={1,10,100,1000,10000,100000,1000000};bool isRP(unsigned i){ unsigned a;//num of digits; unsigned I; for(a=0,I=i;I;I/=10,a++);//نقوم بحفظ عدد المنازل في المتحول اي for(int j=0;j<a;j++) if(!primes[(i=(i/10)+powersOfTen[a-1]*(i%10))])//نقوم باختبار العدد إن كان أولي وذلك بالتحقق من قيمته في المصفوفة return false; //ملاحظة بداخل أقواس المصفوفة يقوم بأخذ الآحاد ووضعها فيآخر خانة في العدد return true;}int main(){ //أولا نقوم بعمل مصفوفة تمثّل جميع الأرقام ونعتبر مبدئياً أنها أولية for(int i=0;i<1000000;i++)primes=true; primes[0]=primes[1]=false;//الصفر والواحد ليسا أوليين for(int i=2;i<1000000;i++)//بدءاً من الرقم اثنان if(primes)//إن كان أولياً for(int j=2;j*i<1000000;j++) primes[j*i]=false;//نقوم بحذف مل مضاعفات هذا العدد //الطريقة السابقة تسمّى غربلة الأعداد عن طريق حذف مضاعفات أي عدد unsigned x=0; for(int i=2;i<1000000;i++) if(isRP(i))//إذا كان العدد المحدد أولي دائري { x++;//نقوم بزيادة العداد std::cout<<i<<std::endl; } std::cout<<x<<std::endl; return 0;}