Spaces:
Running
Running
حسنا عوض ان تظهر لك الشاشه البديه الخاصه بان الموقع في متجر التطبيقات لا اوده عند النقرع الزر مباشره سيعمل هذا الكود ضبط مكانه وطريقته وايضا اجعل الرسائل في اطور جميله <a href="https://drive.google.com/uc?export=download&id=1VFM68UW6dB_BpL8akS4BO964CvBBZbt6" download style="display:inline-block; padding:12px 24px; background:#28a745; color:#fff; text-decoration:none; border-radius:8px; font-weight:bold;"> تحميل التطبيق (APK) </a> - Initial Deployment
217c0c0
verified
| <html lang="ar" dir="rtl"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>فحص الأعداد الأولية - Prime Checker</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| @import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700;900&display=swap'); | |
| body { | |
| font-family: 'Tajawal', sans-serif; | |
| background-color: #f0fdf4; | |
| } | |
| .gradient-bg { | |
| background: linear-gradient(135deg, #10b981 0%, #059669 100%); | |
| } | |
| .number-input { | |
| transition: all 0.3s ease; | |
| } | |
| .number-input:focus { | |
| box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.3); | |
| } | |
| .result-card { | |
| transition: all 0.5s ease; | |
| opacity: 0; | |
| height: 0; | |
| overflow: hidden; | |
| } | |
| .result-card.show { | |
| opacity: 1; | |
| height: auto; | |
| } | |
| .prime { | |
| background-color: #d1fae5; | |
| border-color: #10b981; | |
| } | |
| .not-prime { | |
| background-color: #fee2e2; | |
| border-color: #ef4444; | |
| } | |
| .history-item { | |
| transition: all 0.2s ease; | |
| } | |
| .history-item:hover { | |
| transform: translateX(-5px); | |
| } | |
| .android-btn:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); | |
| } | |
| .pulse { | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| transform: scale(1); | |
| } | |
| 50% { | |
| transform: scale(1.05); | |
| } | |
| 100% { | |
| transform: scale(1); | |
| } | |
| } | |
| </style> | |
| </head> | |
| <body class="min-h-screen"> | |
| <!-- Android Download Banner --> | |
| <div class="gradient-bg text-white py-3 px-4 flex items-center justify-between shadow-lg"> | |
| <div class="flex items-center space-x-2 space-x-reverse"> | |
| <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="#a7f3d0"> | |
| <path d="M3 18a1 1 0 0 0 1 1h2v2a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-2h2v2a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1v-2h2a1 1 0 0 0 1-1v-9H3v9zm16-13h-4V3a1 1 0 0 0-1-1h-1a1 1 0 0 0-1 1v2H8V3a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v2H1v4h18V5z"/> | |
| </svg> | |
| <span class="font-bold text-lg">تطبيق الأعداد الأولية</span> | |
| </div> | |
| <a href="https://drive.google.com/uc?export=download&id=1VFM68UW6dB_BpL8akS4BO964CvBBZbt6" | |
| download | |
| class="bg-white text-emerald-700 font-bold py-2 px-6 rounded-full flex items-center space-x-2 space-x-reverse hover:bg-emerald-50 transition-all pulse"> | |
| <i class="fas fa-download"></i> | |
| <span>حمّل التطبيق الآن (APK)</span> | |
| </a> | |
| </div> | |
| <!-- Main Content --> | |
| <div class="container mx-auto px-4 py-8 max-w-4xl"> | |
| <!-- Header --> | |
| <div class="text-center mb-12"> | |
| <h1 class="text-4xl font-bold text-emerald-800 mb-3">فحص الأعداد الأولية</h1> | |
| <p class="text-gray-600 text-lg">أدخل أي عدد صحيح موجب لمعرفة إذا كان أولياً أم لا</p> | |
| </div> | |
| <!-- Input Section --> | |
| <div class="bg-white rounded-xl shadow-lg p-6 mb-8"> | |
| <div class="flex flex-col md:flex-row items-center justify-between gap-4"> | |
| <input type="number" id="numberInput" class="number-input flex-grow border-2 border-gray-200 rounded-lg py-3 px-4 text-xl focus:outline-none focus:border-emerald-500" placeholder="أدخل الرقم هنا..." min="1"> | |
| <button id="checkBtn" class="gradient-bg text-white font-bold py-3 px-8 rounded-lg text-lg hover:bg-emerald-700 transition-all w-full md:w-auto"> | |
| <i class="fas fa-search mr-2"></i> تحقق من الرقم | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Result Section --> | |
| <div id="resultCard" class="result-card rounded-xl shadow-lg p-6 mb-8 border-2"> | |
| <div class="flex items-center justify-between"> | |
| <h3 class="text-xl font-bold" id="resultTitle">النتيجة</h3> | |
| <span id="primeBadge" class="px-3 py-1 rounded-full text-sm font-bold hidden"></span> | |
| </div> | |
| <p class="mt-3 text-gray-700" id="resultText"></p> | |
| <div class="mt-4" id="factorsContainer"></div> | |
| </div> | |
| <!-- Features Section --> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8"> | |
| <div class="bg-white rounded-xl shadow-lg p-6"> | |
| <div class="text-emerald-500 mb-3"> | |
| <i class="fas fa-bolt text-2xl"></i> | |
| </div> | |
| <h3 class="font-bold text-lg mb-2">فحص سريع</h3> | |
| <p class="text-gray-600">تحقق من أي رقم في ثوانٍ باستخدام خوارزمية متطورة</p> | |
| </div> | |
| <div class="bg-white rounded-xl shadow-lg p-6"> | |
| <div class="text-emerald-500 mb-3"> | |
| <i class="fas fa-history text-2xl"></i> | |
| </div> | |
| <h3 class="font-bold text-lg mb-2">سجل الأرقام</h3> | |
| <p class="text-gray-600">احتفظ بسجل الأرقام التي قمت بفحصها مسبقاً</p> | |
| </div> | |
| <div class="bg-white rounded-xl shadow-lg p-6"> | |
| <div class="text-emerald-500 mb-3"> | |
| <i class="fas fa-chart-pie text-2xl"></i> | |
| </div> | |
| <h3 class="font-bold text-lg mb-2">تحليل العوامل</h3> | |
| <p class="text-gray-600">احصل على تحليل كامل لعوامل الرقم المدخل</p> | |
| </div> | |
| </div> | |
| <!-- History Section --> | |
| <div class="bg-white rounded-xl shadow-lg p-6"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-xl font-bold text-emerald-800">سجل الفحوصات</h2> | |
| <button id="clearHistoryBtn" class="text-red-500 hover:text-red-700"> | |
| <i class="fas fa-trash-alt mr-1"></i> مسح السجل | |
| </button> | |
| </div> | |
| <div id="historyList" class="space-y-2"> | |
| <!-- History items will be added here dynamically --> | |
| <p class="text-gray-500 text-center py-4" id="emptyHistoryText">لا يوجد سجل للفحوصات بعد</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Footer --> | |
| <footer class="gradient-bg text-white py-6 mt-12"> | |
| <div class="container mx-auto px-4 text-center"> | |
| <div class="flex justify-center space-x-6 space-x-reverse mb-4"> | |
| <a href="#" class="hover:text-emerald-200"><i class="fab fa-facebook-f text-xl"></i></a> | |
| <a href="#" class="hover:text-emerald-200"><i class="fab fa-twitter text-xl"></i></a> | |
| <a href="#" class="hover:text-emerald-200"><i class="fab fa-instagram text-xl"></i></a> | |
| </div> | |
| <p class="mb-2">© 2023 فحص الأعداد الأولية. جميع الحقوق محفوظة.</p> | |
| <p class="text-sm text-emerald-100">تم تطويره بحب لمساعدة الطلاب والمهتمين بالرياضيات</p> | |
| </div> | |
| </footer> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', function() { | |
| let attempts = 0; | |
| const maxAttempts = 3; | |
| const numberInput = document.getElementById('numberInput'); | |
| const checkBtn = document.getElementById('checkBtn'); | |
| const resultCard = document.getElementById('resultCard'); | |
| const resultTitle = document.getElementById('resultTitle'); | |
| const resultText = document.getElementById('resultText'); | |
| const primeBadge = document.getElementById('primeBadge'); | |
| const factorsContainer = document.getElementById('factorsContainer'); | |
| const historyList = document.getElementById('historyList'); | |
| const clearHistoryBtn = document.getElementById('clearHistoryBtn'); | |
| const emptyHistoryText = document.getElementById('emptyHistoryText'); | |
| let history = JSON.parse(localStorage.getItem('primeHistory')) || []; | |
| // Load history on page load | |
| renderHistory(); | |
| // Check if number is prime | |
| function isPrime(num) { | |
| if (num <= 1) return false; | |
| if (num <= 3) return true; | |
| if (num % 2 === 0 || num % 3 === 0) return false; | |
| for (let i = 5; i * i <= num; i += 6) { | |
| if (num % i === 0 || num % (i + 2) === 0) return false; | |
| } | |
| return true; | |
| } | |
| // Get factors of a number | |
| function getFactors(num) { | |
| const factors = []; | |
| for (let i = 1; i <= Math.sqrt(num); i++) { | |
| if (num % i === 0) { | |
| factors.push(i); | |
| if (i !== num / i) { | |
| factors.push(num / i); | |
| } | |
| } | |
| } | |
| return factors.sort((a, b) => a - b); | |
| } | |
| // Format number with Arabic commas | |
| function formatNumber(num) { | |
| return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); | |
| } | |
| // Add to history | |
| function addToHistory(num, isPrime) { | |
| const existingIndex = history.findIndex(item => item.number === num); | |
| if (existingIndex !== -1) { | |
| history.splice(existingIndex, 1); | |
| } | |
| history.unshift({ | |
| number: num, | |
| isPrime: isPrime, | |
| date: new Date().toLocaleString() | |
| }); | |
| if (history.length > 10) { | |
| history.pop(); | |
| } | |
| localStorage.setItem('primeHistory', JSON.stringify(history)); | |
| renderHistory(); | |
| } | |
| // Render history | |
| function renderHistory() { | |
| if (history.length === 0) { | |
| emptyHistoryText.classList.remove('hidden'); | |
| return; | |
| } | |
| emptyHistoryText.classList.add('hidden'); | |
| historyList.innerHTML = ''; | |
| history.forEach(item => { | |
| const historyItem = document.createElement('div'); | |
| historyItem.className = `history-item bg-gray-50 rounded-lg p-3 flex items-center justify-between border ${item.isPrime ? 'border-emerald-200' : 'border-red-200'}`; | |
| historyItem.innerHTML = ` | |
| <div class="flex items-center space-x-3 space-x-reverse"> | |
| <span class="font-bold text-lg">${formatNumber(item.number)}</span> | |
| <span class="px-2 py-1 rounded-full text-xs font-bold ${item.isPrime ? 'bg-emerald-100 text-emerald-800' : 'bg-red-100 text-red-800'}"> | |
| ${item.isPrime ? 'أولي' : 'غير أولي'} | |
| </span> | |
| </div> | |
| <span class="text-gray-500 text-sm">${item.date}</span> | |
| `; | |
| historyItem.addEventListener('click', () => { | |
| numberInput.value = item.number; | |
| checkNumber(item.number); | |
| }); | |
| historyList.appendChild(historyItem); | |
| }); | |
| } | |
| // Clear history | |
| clearHistoryBtn.addEventListener('click', () => { | |
| if (confirm('⚠️ هل أنت متأكد من رغبتك في مسح سجل الفحوصات؟\n\nسيتم حذف جميع البيانات المحفوظة ولا يمكن استرجاعها')) { | |
| history = []; | |
| localStorage.removeItem('primeHistory'); | |
| renderHistory(); | |
| } | |
| }); | |
| // Check number function | |
| function checkNumber(num) { | |
| if (!num || num < 1) { | |
| alert('الرجاء إدخال عدد صحيح موجب'); | |
| return; | |
| } | |
| attempts++; | |
| if (attempts > maxAttempts) { | |
| alert('🛑 لقد استنفذت عدد المحاولات المجانية\n\n✨ للحصول على تجربة كاملة بدون قيود، يرجى تحميل التطبيق من الزر بالأعلى'); | |
| return; | |
| } | |
| const prime = isPrime(num); | |
| const factors = getFactors(num); | |
| // Update UI | |
| resultTitle.textContent = `الرقم ${formatNumber(num)}`; | |
| primeBadge.classList.remove('hidden'); | |
| if (prime) { | |
| resultCard.className = 'result-card show rounded-xl shadow-lg p-6 mb-8 border-2 prime'; | |
| resultText.textContent = `هذا عدد أولي لأنه لا يقبل القسمة إلا على نفسه وعلى 1.`; | |
| primeBadge.className = 'px-3 py-1 rounded-full text-sm font-bold bg-emerald-100 text-emerald-800'; | |
| primeBadge.textContent = 'أولي'; | |
| } else { | |
| resultCard.className = 'result-card show rounded-xl shadow-lg p-6 mb-8 border-2 not-prime'; | |
| resultText.textContent = `هذا عدد غير أولي لأنه يقبل القسمة على أعداد أخرى غير نفسه و1.`; | |
| primeBadge.className = 'px-3 py-1 rounded-full text-sm font-bold bg-red-100 text-red-800'; | |
| primeBadge.textContent = 'غير أولي'; | |
| } | |
| // Show factors | |
| factorsContainer.innerHTML = ` | |
| <div class="mt-4"> | |
| <h4 class="font-bold mb-2">عوامل الرقم ${formatNumber(num)}:</h4> | |
| <div class="flex flex-wrap gap-2"> | |
| ${factors.map(factor => ` | |
| <span class="px-3 py-1 bg-gray-100 rounded-full ${factor === 1 || factor === num ? 'font-bold text-emerald-700' : ''}"> | |
| ${formatNumber(factor)} | |
| </span> | |
| `).join('')} | |
| </div> | |
| </div> | |
| `; | |
| // Add to history | |
| addToHistory(num, prime); | |
| } | |
| // Event listeners | |
| checkBtn.addEventListener('click', () => { | |
| const num = parseInt(numberInput.value); | |
| checkNumber(num); | |
| }); | |
| numberInput.addEventListener('keypress', (e) => { | |
| if (e.key === 'Enter') { | |
| const num = parseInt(numberInput.value); | |
| checkNumber(num); | |
| } | |
| }); | |
| }); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=AHMed3290mljdh/gl" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |