في هذه السلسلة نطرح في كل مرة خوارزمية ونطبقها في لغات مختلفة مستفيدين من مزايا كل لغة. كوسيلة لعرض مزايا كل لغة بطريقة غير لغتي أفضل من لغتك.
المطلوب الآن هو تطبيق خوارزمية غربال Atkin لإيجاد الأعداد الأولية التي تقل عن العدد ن (10 آلاف مثلا)
http://en.wikipedia.org/wik...الخورازمية تعمل هكذا
نرسم الأعداد التي من 2 وحتى ن-1
نأخذ أول عدد غير مشطوب (في أول دورة هو 2)
نعتبره أولي ونشطب كل مضاعفاته
نكرر
سلام عليكم ومرحبا !
لاحظت ماف شاركة بلغة الجافا فحبيت أشارككم ..
للي بينفذ الكود .. هذا الكود لـ Java8 يعني لازم يكون عندك آخر نسخة من جافا عشان تدعم الــ APIs يا اللي استخدمتها و الميزات الثانية ..
هذا هو الكود .. ما بعرف اذا طريقة تطبيقي صحيحة أو خطأ .. أو ممكن أكون فهمت المسألة غلط .. يريت تقارنوا التنفيذ .. و الكود عشان توروني فين خطأي ..
package com.matar.alog.primes;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Iterator;
import java.util.function.Predicate;
public class AtkinAlogrithmWithJava {
/* Class Body */
private static int $limitPoint = 0;
private static long $startTime = 0;
private static long $endTime = 0;
private static HashSet<Integer> primes;
public static void main(String... mo9){
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
try {
System.err.println("Enter LimitPoint Please : ");
$limitPoint = Integer.parseInt(buffer.readLine());
} catch (NumberFormatException e) {
System.err.println("Inter Number Please ! <.Error.>");
} catch (IOException e) {
System.err.println("Can't Read With BufferReader ! <.Excp.>");
}
calculatePrimes($limitPoint);
}
private static void calculatePrimes(int $limitPoint){
$startTime = System.currentTimeMillis();
primes = new HashSet<Integer>();
for(int $num = 2; $num<= $limitPoint ;$num++){
primes.add($num);
}
System.out.println("Before ... ");
System.out.println(primes);
System.out.println("^__^.");
System.out.println("After ... ");
Object arr[] = primes.toArray();
for(int x = 0 ; x <= arr.length-1;x++){
int p = (int)arr[x];
primes.removeIf(new Predicate<Integer>(){
@Override
public boolean test(Integer t) {
boolean result = (
t == p * 2||
t == p * 3||
t == p * 4||
t == p * 5||
t == p * 6||
t == p * 7||
t == p * 8||
t == p * 9
) ? true:false;
return result;
}
}
);
}
System.out.println(primes);
$endTime = System.currentTimeMillis();
long $long = $endTime - $startTime;
System.err.println("Time = "+$long);
}
}
(^)_(^)
محمد مطر
ضع اربع مسافات قبل كل سطر للتنسيق
package com.matar.alog.primes;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Iterator;
import java.util.function.Predicate;
public class AtkinAlogrithmWithJava {
/* Class Body */
private static int $limitPoint = 0;
private static long $startTime = 0;
private static long $endTime = 0;
private static HashSet<Integer> primes;
public static void main(String... mo9){
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
try {
System.err.println("Enter LimitPoint Please : ");
$limitPoint = Integer.parseInt(buffer.readLine());
} catch (NumberFormatException e) {
System.err.println("Inter Number Please ! <.Error.>");
} catch (IOException e) {
System.err.println("Can't Read With BufferReader ! <.Excp.>");
}
calculatePrimes($limitPoint);
}
private static void calculatePrimes(int $limitPoint){
$startTime = System.currentTimeMillis();
primes = new HashSet<Integer>();
for(int $num = 2; $num<= $limitPoint ;$num++){
primes.add($num);
}
System.out.println("Before ... ");
System.out.println(primes);
System.out.println("^__^.");
System.out.println("After ... ");
Object arr[] = primes.toArray();
for(int x = 0 ; x <= arr.length-1;x++){
int p = (int)arr[x];
primes.removeIf(new Predicate<Integer>(){
@Override
public boolean test(Integer t) {
boolean result = (
t == p * 2||
t == p * 3||
t == p * 4||
t == p * 5||
t == p * 6||
t == p * 7||
t == p * 8||
t == p * 9
) ? true:false;
return result;
}
}
);
}
System.out.println(primes);
$endTime = System.currentTimeMillis();
long $long = $endTime - $startTime;
System.err.println("Time = "+$long);
}
التعليقات