• 0
أحمد أبو عبد البر

نتيجة السؤال الثاني عشر 12

سؤال

سلام عليكم

 

كان السؤال الثاني عشر هو

 

العدد الأولي الدائري هو الذي أرقامه تشكل عددا أوليا كيفما أزحناها

مثال العدد 197 عدد أولي دائري لأن 971 و 719 عددان أوليان

ولكي نفهم العدد الأولي الدائري أرسم دائرة ووزع عليها أرقام العدد ثم ابد من أي رقم وانتقل إلى اليمين  فسجد رقما أوليا

 

الأرقام الأولية الدائرية  الأصغر من 100 هي : 2 3 5 7 11 13 17 31 37 71 73 79 97

المطلوب هو معرفة كم عددا أوليا دائريا أصغر من 1000000

 

 

وكان الجواب الصحيح هو 55

وقد أجاب عنه :

مصطفى

العمدة

SOLO.NET

zaraki_kenpache

 

نرجو من الإخوة وضع إجاباتهم مع بعض من التوضيح لتتم الفائدة

 

تم تعديل بواسطه أحمد أبو عبد البر
0

شارك هذا الرد


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

3 إجابة على هذا السؤال .

  • 0

استخدمت في هذا السؤال دالة اختبار الاولية التي استخدمتها في حل السؤال السابع مع اضافة دالة لاستبعاد اي عدد يحتوي على رقم زوجي و دالة اخرى للقيام بعملية التدوير للعدد

import sysx=1000000result=1even=[0,2,4,6,8]def check_prime(x):                        m=x                        a=2                        k=m-1                        q=pow(a,k,m)                        if q == 1:                                  return 1                         else : return 0def have_even(x):                 count=len(str(x))                 for j in range(0,count,1):                           mm=str(x)                           m1=mm[j]                           mm1=int (m1)                           if mm1  in even:                                           return 1def checker(x):               count=len(str(x))                    s=range(count)               ccount=count-1               for j in range(0,count,1):                                          m=str(x)                           st=m[j]                           ff=ccount-j                           s[0]=st                           for i in range(1,count,1):                             if j+i < count:                               s[i]=m[j+i]                             else :                               v=i-count                               s[i]=m[j+v]                           ss="".join(s)                           #print ss                           target=int(ss)                           if  check_prime(target)==0:                                                      return 0                                                   x1=x-1                        for m in range(x1,2,-2):           if have_even(m) != 1:             if check_prime(m) == 1:                                             if checker(m)!=0:                                   # print m                                    result=result+1print result                                                       

و قد كان وقت التنفيذ كالاتي

real    0m1.724s
user    0m1.696s
sys    0m0.024s

و بالتجربة تبين أن دالة استبعاد الاعداد الزوجية وفرت بعض الوقت في التنفيذ

0

شارك هذا الرد


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

السلام عليكم


من بين الأعداد الطبيعية المحصورة بين 1 و 6، الأعداد 2 و 3 و 5 أولية، بينما الأعداد 1 و 4 و 6 أعداد غير أولية.


جميع الأعداد الأولية - عدا 2 و 5 - تنتهي ب 1 أو 3 أو 7 أو 9 لأن جميع الأعداد التي تنتهي ب 0 أو 2 أو 4 أو 6 أو 8 هي من مضاعفات العدد 2 فليست بالتأكيد أولية، والأعداد التي تنتهي ب 5 هي من مضاعفات العدد 5 فليست أولية أيضاً.




odule Module1

    Dim DC As New HashSet(Of Char)
    Sub Main()
        DC.Add("2")
        DC.Add("4")
       DC.Add("6")
        DC.Add("8")
        DC.Add("0")
      DC.Add("5")
        Dim max As Integer = 1000000
        Dim Primes() As Integer = (From X As Integer In Enumerable.Range(2, max - 1) Where IsPrime(X) AndAlso ND(X.ToString) Select X).ToArray
        Dim CircularPrimes = (From x As Integer In Primes Select x Where AllRotationPrime(Primes, x))
        Console.WriteLine("Circular Primes:" + CircularPrimes.Count.ToString)
        For i As Integer = 0 To CircularPrimes.Count - 1
            Console.Write(CircularPrimes(i).ToString + " ")
        Next
        Console.ReadLine()
    End Sub
    Private Function IsPrime(ByRef x As Integer) As Boolean
        If x <= 0 Then Return False
      If x = 2 Then Return True
        If x = 3 Then Return True
        If x = 5 Then Return True
        If x Mod 2 = 0 Then Return False
        If x < 4 Then Return True
        Dim sqr As Integer = Math.Round(Math.Sqrt(x), 0, MidpointRounding.AwayFromZero)
        If sqr Mod 2 = 0 Then sqr += 1
      Dim i As Integer = 1
        While i <= sqr
            i += 2
            If x Mod i = 0 Then Return False

        End While
        Return True
    End Function
    Private Function ND(ByRef N As String) As Boolean
      If N = "2" Then Return True
        If N = "3" Then Return True
        If N = "5" Then Return True
        For Each NC As Char In N
            If DC.Contains(NC) Then Return False
        Next
        Return True
    End Function

  Private Function AllRotationPrime(ByRef p As IEnumerable(Of Integer), ByVal n As String) As Boolean

        For i As Integer = 0 To n.Length - 2
            n = n.Substring(1) & n(0)
            If p.Contains(n) = False Then Return False
        Next
        Return True
    End Function
End Module

تم تعديل بواسطه SOLO.NET
0

شارك هذا الرد


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

Project Euler 35 :)

0

شارك هذا الرد


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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

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

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