পরবর্তী প্রাইম সন্ধানের দ্রুততম কোড


17

নিম্নরূপ সমস্যা হয়।

ইনপুট: একটি পূর্ণসংখ্যাn

আউটপুট: সবচেয়ে ছোট প্রাইম এর চেয়ে বড় n

চ্যালেঞ্জটি হ'ল এটি করার পক্ষে দ্রুততম কোড দেওয়া। আমি মাপ থেকে শুরু মান কোডটি পরীক্ষা হবে মোটামুটিভাবে10^8 10^200 এবং আকার মধ্যে দ্বিগুন পর্যন্ত এটি অধিক সময় লাগে এক মিনিট আমার কম্পিউটারে 10 সেকেন্ড।

বিজয়ী কোডটি বৃহত্তম ইনপুট আকারের জন্য পরবর্তী প্রধানটি খুঁজে পাবে।

তুলনা করার মাধ্যমে, অজগরে লেখা একটি সাধারণ চালুনি 10^8প্রায় 20সেকেন্ডের চেয়ে পরবর্তী প্রাইমটিকে বড় খুঁজে পেতে সক্ষম হয় ।

আমার 4 গিগাবাইট র‌্যাম উবুন্টু কম্পিউটারে এটি পরীক্ষা করার প্রয়োজনীয়তাটি কঠোর। সমস্ত কোড অবশ্যই বিনামূল্যে (উভয় অর্থে) থাকতে হবে এবং যদি এটি গ্রন্থাগার ব্যবহার করে তবে সেগুলি অবশ্যই নিখরচায় এবং সহজেই ইনস্টলযোগ্য হবে। প্রতিবেদন করা কোনও মিথ্যা প্রাইম অবিলম্বে জমাটি অযোগ্য ঘোষণা করবে।

বাহ্যিক লাইব্রেরি ব্যবহার না করে যদি কোডটি পুরোপুরি সেই ভাষায় লেখা থাকে তবে আমি প্রতিটি প্রোগ্রামিং ভাষায় বিজয়ীদের জন্য পৃথক প্রশংসা দেব। প্রতিযোগিতা চলাকালীন আমি দ্রুততম সময়ের একটি চলমান টেবিলটিও রাখব যাতে লোকেরা দেখতে পারে যে তারা কী করছে।

এখনও টেবিল

  • পাইথন। একটি বিস্ময়কর 357অঙ্কের মৌলিক 343239883006530485749095039954069660863471765007165270469723172959277159169882802606127982033072727748864815569574042901856099399985832190628701414555752857600000000000000000000000000000000000000002872284792758930912601189043411951050852357613658978971208596097634095500808832510259693761982135208603287199546795000697807728609476163156438356035166156820611সরবরাহকৃত কোডটি ব্যবহার করে 10 সেকেন্ডের মধ্যে চূড়ান্ত নম্বর ছিল primo। কেউ কি এই প্রথম এন্ট্রি মারবে?


@ পিটারটেলর এই প্রশ্নটি আমার মনে হয় এমন সময় জটিলতা সম্পর্কে। এটি সেকেন্ডে ব্যবহারিক গতি সম্পর্কে। আমার মনে হয় এই দুটি জিনিস একেবারেই আলাদা হতে পারে।
ফেলিপা

অবশ্যই, আপনি যদি ছোট পরীক্ষার ক্ষেত্রে আটকে থাকেন। তবে যেহেতু কেউই অন্য প্রশ্নের জন্য একেএস বাস্তবায়নে বিরক্ত করেনি, আপনি একই উত্তর পেতে চলেছেন।
পিটার টেইলর

3
@ পিটারটেলর আমাকে দ্বিমত করতে দেয়। অবশেষে, কোনও সাইটের 90% ট্র্যাফিক অনুসন্ধান ইঞ্জিন থেকে আসা উচিতদ্রুত সেমিপ্রাইম ফ্যাক্টেরাইজেশন এবং একাধিক বহুপদী চতুষ্কোণ সিভের জন্য একটি গুগল অনুসন্ধান আমি আমার কোডটি যথাক্রমে # 2 এবং # 4 থেকে আমার কোডটি নিয়ে এসেছি এমন মূল সমস্যাটি ফিরে আসে। আমি এক পর্যায়ে কল্পনা করি, এই সমস্যাটিও যথেষ্ট পরিমাণে র‌্যাঙ্ক করবে fast next prime function
primo

1
আমি মনে করি ওপি তার উত্তরগুলির পরীক্ষাগুলি আপডেট করতে ব্যর্থ হয়েছে ...
mbomb007

উত্তর:


21

পাইথন ~ 451 ডিজিট

এটি একটি লাইব্রেরির অংশ যা আমি লিখেছি সেমিপ্রাইম ফ্যাক্টরীকরণ সমস্যার জন্য , অপ্রয়োজনীয় ফাংশনগুলি অপসারণ করে। এটি বেলি-পিএসডাব্লু প্রিমিটিটি টেস্ট ব্যবহার করে , যা প্রযুক্তিগতভাবে একটি সম্ভাবনাময় পরীক্ষা, তবে আজ অবধি কোনও অজানা সিউডোপ্রাইমস নেই - এবং এমনকি যদি আপনি একটি সন্ধান করতে সক্ষম হন তবে নগদ পুরষ্কারও রয়েছে (বা কোনও প্রমাণ নেই যার প্রমাণ নেই) ।

সম্পাদনা করুন : আমি বুঝতে পারি নি যে পাইথন বিল্ট-ইন মডিউলার এক্সপেনসিয়েশন করেছে। বিল্ট-ইন ফলাফলের জন্য আমার নিজের প্রতিস্থাপন প্রায় 33% এর পারফরম্যান্স বৃদ্ধিতে।

my_math.py

# legendre symbol (a|m)
# note: returns m-1 if a is a non-residue, instead of -1
def legendre(a, m):
  return pow(a, (m-1) >> 1, m)

# strong probable prime
def is_sprp(n, b=2):
  d = n-1
  s = 0
  while d&1 == 0:
    s += 1
    d >>= 1

  x = pow(b, d, n)
  if x == 1 or x == n-1:
    return True

  for r in range(1, s):
    x = (x * x)%n
    if x == 1:
      return False
    elif x == n-1:
      return True

  return False

# lucas probable prime
# assumes D = 1 (mod 4), (D|n) = -1
def is_lucas_prp(n, D):
  P = 1
  Q = (1-D) >> 2

  # n+1 = 2**r*s where s is odd
  s = n+1
  r = 0
  while s&1 == 0:
    r += 1
    s >>= 1

  # calculate the bit reversal of (odd) s
  # e.g. 19 (10011) <=> 25 (11001)
  t = 0
  while s > 0:
    if s&1:
      t += 1
      s -= 1
    else:
      t <<= 1
      s >>= 1

  # use the same bit reversal process to calculate the sth Lucas number
  # keep track of q = Q**n as we go
  U = 0
  V = 2
  q = 1
  # mod_inv(2, n)
  inv_2 = (n+1) >> 1
  while t > 0:
    if t&1 == 1:
      # U, V of n+1
      U, V = ((U + V) * inv_2)%n, ((D*U + V) * inv_2)%n
      q = (q * Q)%n
      t -= 1
    else:
      # U, V of n*2
      U, V = (U * V)%n, (V * V - 2 * q)%n
      q = (q * q)%n
      t >>= 1

  # double s until we have the 2**r*sth Lucas number
  while r > 0:
      U, V = (U * V)%n, (V * V - 2 * q)%n
      q = (q * q)%n
      r -= 1

  # primality check
  # if n is prime, n divides the n+1st Lucas number, given the assumptions
  return U == 0

# primes less than 212
small_primes = set([
    2,  3,  5,  7, 11, 13, 17, 19, 23, 29,
   31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
   73, 79, 83, 89, 97,101,103,107,109,113,
  127,131,137,139,149,151,157,163,167,173,
  179,181,191,193,197,199,211])

# pre-calced sieve of eratosthenes for n = 2, 3, 5, 7
indices = [
    1, 11, 13, 17, 19, 23, 29, 31, 37, 41,
   43, 47, 53, 59, 61, 67, 71, 73, 79, 83,
   89, 97,101,103,107,109,113,121,127,131,
  137,139,143,149,151,157,163,167,169,173,
  179,181,187,191,193,197,199,209]

# distances between sieve values
offsets = [
  10, 2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6,
   6, 2, 6, 4, 2, 6, 4, 6, 8, 4, 2, 4,
   2, 4, 8, 6, 4, 6, 2, 4, 6, 2, 6, 6,
   4, 2, 4, 6, 2, 6, 4, 2, 4, 2,10, 2]

max_int = 2147483647

# an 'almost certain' primality check
def is_prime(n):
  if n < 212:
    return n in small_primes

  for p in small_primes:
    if n%p == 0:
      return False

  # if n is a 32-bit integer, perform full trial division
  if n <= max_int:
    i = 211
    while i*i < n:
      for o in offsets:
        i += o
        if n%i == 0:
          return False
    return True

  # Baillie-PSW
  # this is technically a probabalistic test, but there are no known pseudoprimes
  if not is_sprp(n): return False
  a = 5
  s = 2
  while legendre(a, n) != n-1:
    s = -s
    a = s-a
  return is_lucas_prp(n, a)

# next prime strictly larger than n
def next_prime(n):
  if n < 2:
    return 2
  # first odd larger than n
  n = (n + 1) | 1
  if n < 212:
    while True:
      if n in small_primes:
        return n
      n += 2

  # find our position in the sieve rotation via binary search
  x = int(n%210)
  s = 0
  e = 47
  m = 24
  while m != e:
    if indices[m] < x:
      s = m
      m = (s + e + 1) >> 1
    else:
      e = m
      m = (s + e) >> 1

  i = int(n + (indices[m] - x))
  # adjust offsets
  offs = offsets[m:]+offsets[:m]
  while True:
    for o in offs:
      if is_prime(i):
        return i
      i += o

একটি নমুনা পরীক্ষার স্ক্রিপ্ট:

from time import clock
from my_math import *

n = i = 317**79
while True:
  i *= 317
  time1 = clock()
  n, o = next_prime(i), n
  span = clock()-time1
  if span > 10:
    break
  print(len(str(n)), span)
print(o)

৩১7 এর একটি ফ্যাক্টর বেছে নেওয়া হয়েছিল, কারণ এটি প্রায় বার্ষিক বর্গমূল 10000, পুনরাবৃত্তির জন্য প্রায় 2.5 ডিজিট যুক্ত করে (এবং কারণ দ্বিগুণ হয়ে যাওয়ার পক্ষে খুব ধীর ছিল)। আউটপুটটি সংখ্যাগুলির বর্তমান সংখ্যা এবং নেওয়া সময় দেখায়।

নমুনা ফলাফল:

201 0.13121248650317288
203 0.059535499623555505
206 0.9157767258129175
208 0.2583420518529589
211 0.15367400046653978
213 0.32343915218274955
216 1.3962866788935466
218 0.5986165839513125
221 0.973842206202185
223 2.346910291671148
...
428 0.932809896229827
431 4.345940056627313
433 9.511724255457068
436 6.089835998709333
438 1.3793498894412721
441 4.290633027381972
443 3.5102506044762833
446 3.1629148397352083
448 3.364759208223404
451 7.34668009481652
1551197868099891386459896063244381932060770425565921999885096817830297496627504652115239001983985153119775350914638552307445919773021758654815641382344720913548160379485681746575245251059529720935264144339378936233043585239478807971817857394193701584822359805681429741446927344534491412763713568490429195862973508863067230162660278070962484418979417980291904500349345162151774412157280412235743457342694749679453616265540134456421369622519723266737913

সমস্ত কোড এখন অজগর 3 সামঞ্জস্যপূর্ণ।


তা আশ্চর্যজনকভাবে দ্রুত! আমি কয়েক দিনের মধ্যে দ্বিগুণ আকারের (এবং একটি নির্বিচারক প্রাথমিকতা পরীক্ষা) দিয়ে এটি সঠিকভাবে চালাব এবং সারণীতে সবচেয়ে বড় নম্বর রাখব। আমার সন্দেহ হয় আপনি ইতিমধ্যে বিজয়ী হতে পারেন।
ফেলিপা

1
এফডব্লিউআইডাব্লু, সেজে, next_prime((2^520)*(10^200))আমার মেশিনে প্রায় 15 সেকেন্ড, সুতরাং প্রথম ব্লাশে এটি বেশ চিত্তাকর্ষক। তবে ... next_prime((2^520)*(10^200),proof=False)0.4 সেকেন্ড সময় নেয় কারণ এটি কেবলমাত্র সিউডোপ্রিমিলিটি পরীক্ষা করে। আপনার দাবি "কোন পরিচিত pseudoprimes হল" vanishingly বিশ্বাসী হিসাবে সংখ্যা বিট 64. 357 বেশী তাদের জন্য সংখ্যা যায়, আমি এমনকি দূরবর্তী অবস্থান থেকে counterexamples অভাব দ্বারা বিশ্বাস নই।
বুথবি

@ বুথবাই এটি লক্ষ্য করার মতো যে এটি ম্যাপেলের ব্যবহৃত খুব একই পদ্ধতি । যে পদ্ধতিটি 33 বছর আগে প্রকাশিত হয়েছিল এবং এখনও কোনও পরিচিত সিউডোপ্রাইমস তার সঠিকতার ডিগ্রির জন্য কথা বলে না।
primo

1
এই কারণেই আমি সেজ ব্যবহার করি। "ব্যর্থ হিসাবে পরিচিত নয়" আসলে "কাজের জন্য পরিচিত" এর মতো নয়। মনে করুন 400 টি সংখ্যার নীচে একটি ভুয়া সিউডোপ্রাইম রয়েছে। এটি খুঁজে পেতে কয়েক বিলিয়ন বছর সময় লাগবে - তবে এটি এখনও থাকবে, 'সিউডোপ্রাইম = প্রাইম' প্রমাণের যে কোনও প্রচেষ্টা ব্যর্থ করে। আমি সর্বদা "সমাধানগুলি" ডাউনভোট করব যা শূন্য গ্যারান্টি সহ সম্ভাব্য পদ্ধতি ব্যবহার করে। মন্টে কার্লো? ঠিক. "এটি প্রধান" কারণ উইজার্ড আমাকে বলেছিল সম্ভবত এটি ছিল "? নাঃ।
বুথবি

1
@ বুথবি আপনার একটি উত্তর যুক্ত করতে হবে যাতে আমরা এটির অধীনে মন্তব্য করতে পারি :)
ফেলিপা

6

জিএমপি সহ সি ++: ৫77 সংখ্যা

জিএমপিতে মিলার-রবিন বাস্তবায়ন ব্যবহার করে। এটি একটি মিথ্যা ইতিবাচক প্রত্যাবর্তন করতে পারে, তবে সৌভাগ্য আসলে সম্ভাব্যতা 2 prob -200 দিয়ে একটিকে আঘাত করে।

#include <gmp.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>

double time() {
  struct timeval t;
  gettimeofday(&t, NULL);
  return t.tv_usec  * 1e-6 + t.tv_sec;
}

int main(int argc, char *argv[]) {
  mpz_t n, m;
  mpz_init_set_ui(n, 10);
  mpz_pow_ui(n, n, 200);
  mpz_init(m);
  for (int i = 0; true; i++, mpz_mul_ui(n, n, 2)) {
    double start = time();
    for (mpz_add_ui(m, n, 1); !mpz_millerrabin(m, 100); mpz_add_ui(m, m, 2)) ;
    double t = time() - start;
    gmp_printf("%d %Zd %f\n", i, m, t);
    if (t > 10.0) break;
  }
}

10^200 * 2^1216 + 361আমার ধীর ল্যাপটপে সময় নিয়ে চলার আগে প্রাইম (567 ডিজিট) সন্ধান করে ।


3

জিএমপি মডিউল, 1300 সংখ্যা সহ পার্ল

আমার মডিউল ম্যাথ :: প্রাইম :: ইউটিউল এবং এর জিএমপি ব্যাক এন্ড ব্যবহার করে । সঠিক ক্রসওভার পয়েন্ট আপনার কম্পিউটারের উপর নির্ভর করবে এবং আপনার সর্বশেষে জিএমপি লাইব্রেরি রয়েছে কিনা। সমস্ত কোড বিনামূল্যে (মডিউলগুলি গিথুব এবং সিপিএএন-তে রয়েছে এবং জিএমপি নিখরচায় উপলব্ধ)। আমি এগুলি ডাব্লুএস এর উবুন্টু পাশাপাশি একটি ডেস্কটপ উবুন্টুতে চালিত করেছি (এবং ফেডোরা, এবং এআইএক্স, এবং নেটবিএসডি, ইত্যাদি)।

মূল কোডটি সি এবং সি + জিএমপিতে রয়েছে। এমপিইউ থেকে পরবর্তী_প্রাইম সংখ্যাটি খুব বড় দেখেছে এবং এটি জিএমপি ব্যাক এন্ডে ফরোয়ার্ড করেছে (বা পিছনের শেষটি ইনস্টল না করা থাকলে খাঁটি পার্ল কোড)। এটি স্ট্রিংফাইস করে এবং এমপিজেডে রূপান্তরিত করে এবং ফলাফলটিকে পুনরায় ইনপুট অবজেক্ট টাইপ বা ম্যাথ :: বিগইন্টে রূপান্তরিত করে। পরের_প্রথম নিজেই করে:

  • একটি আধুনিক 30 চাকা
  • অবশিষ্ট মোড 23 # এর উপর নজর রাখে যাতে এটি 23 পর্যন্ত প্রাইমের জন্য নেটিভ মডুলগুলি করতে পারে
  • এইগুলি পাস করার বিষয়ে সম্ভাব্য প্রাথমিক পরীক্ষা।

সম্ভাব্য প্রাথমিক পরীক্ষাটি হ'ল:

  • এমপিজেড_জিসিডি_উই ব্যবহার করে ক্ষুদ্র বিভাজনকারীদের জন্য পরীক্ষা করুন (101 এর মধ্যে এইগুলির মধ্যে 64-বিট দুটিতে)
  • একক-গণনা করা বড় আদিমালিকাগুলি ব্যবহার করে ছোট বিভাজনকারীদের পরীক্ষা করুন। এটি হয় ইনপুট আকারের উপর নির্ভর করে 10k বা 40k অবধি প্রাইম হয়।
  • 2 ^ 1600 এর চেয়েও বড় মানগুলির জন্য, গাছের গাছ ব্যবহার করে আরও পরীক্ষামূলক বিভাগ সম্পাদন করে। এটি আরও দক্ষতার সাথে করা যেতে পারে।
  • অবশেষে, ES BPSW সম্পন্ন হয়েছে (বেস 2 সহ মিলার-রবিন পরীক্ষা এবং তারপরে একটি অতিরিক্ত শক্তিশালী লুকাস পরীক্ষা )।

ইএস বিপিএসডাব্লু এর আগে সমস্ত কিছু কেবল অপ্টিমাইজেশন, আমরা অবশ্যই পরবর্তী_প্রাইমের জন্য চাই। পরের_প্রেমটি ম্যাথ :: বিগইন্ট মডিউলটি ব্যবহার করে (Pচ্ছিক পরী এবং জিএমপি ব্যাক এন্ডস সহ মূল) ব্যবহার করে পার্লে প্রয়োগ করা হয়। এটি এএস বিপিএসডাব্লু করে (পারির মতো) তবে ততটা অনুকূলিত হয়নি।

আমি আংশিক-চালনী-ভিত্তিক সংস্করণের গুণাবলী সম্পর্কে চিন্তা করেছি, উদাহরণস্বরূপ, 2 টি গুণমান rit আমি সত্যিই নিশ্চিত নই যে এটি সত্যিই আরও ভাল হবে কিনা, কারণ ফাঁকটি ছোট হওয়ায় আমরা বেশিরভাগ সময় অপ্রয়োজনীয়ভাবে ছাঁটাই করতাম, এবং কখনও কখনও বড় ব্যবধানের জন্য আমাদের এটি একাধিকবার পুনরাবৃত্তি করতে হত।

গ্রন্থাগারটি ইসিপিপি প্রয়োগ করে (শংসাপত্র সহ) যাতে আমরা ফলাফলের উপর একটি প্রমাণ চালাতে পারি, তবে অন্তর্ভুক্ত বহুভুজগুলির ছোট ডিফল্ট সেটের জন্য 1200 ডিজিট সত্যই অনেক বড় (বড় সেটগুলি ডাউনলোড করার জন্য একটি পদ্ধতি রয়েছে - প্রমাণগুলি কিছুটা নিচে নেবে 15 মিনিট যা পারির এপিআর-সিএল থেকে কিছুটা দ্রুত তবে রাইথএক্সের এমপিজেড_প্রিলের চেয়ে কিছুটা ধীর)। ইসিপিপি বনাম এপিআর-সিএল এর একটি নেতিবাচক দিকটি এটির আরও বেশি সময় বৈচিত্র্য রয়েছে তাই এটির গড় সময় হওয়ার আগে কোনও সংখ্যায় এটি 10 ​​সেকেন্ড অতিক্রম করার ভাল সম্ভাবনা রয়েছে। একটি প্রমাণ সহ আমি মনে করি আমরা 400 ডিজিটের পরিসরের কিছুতে সীমাবদ্ধ না রাখি যদি না আমরা বহু-থ্রেড সফ্টওয়্যারটি না দিয়ে থাকি।

#!/usr/bin/env perl
use warnings;
use strict;
use Math::Prime::Util ":all";
use Math::Prime::Util::GMP;  # Barf if the backend isn't installed
use Time::HiRes qw(gettimeofday tv_interval);
use Math::GMP;

my $n = Math::GMP->new(10) ** 200;
while (1) {
  my $start = [gettimeofday];
  my $np = next_prime($n);
  my $sec = tv_interval($start);
  my $len = length($n);
  die "next_prime $len = +",$np-$n," in $sec seconds\n" if $sec > 10;
  warn "  next_prime $len = +",$np-$n," in $sec seconds\n";
  $n *= 10;
}

আমি প্রিমো দ্বারা ব্যবহৃত একই ক্রমটি দিয়ে চেষ্টা করার সিদ্ধান্ত নিয়েছি। এটি 1191 ডিজিটে পৌঁছেছে, সেখানেই আমরা 18138 এর ফাঁক ফেলেছি the আমি সর্বশেষে আমার_ম্যাথ.পি ব্যবহার করে প্রিমো কোডটিও পরীক্ষা করেছি। এটি 10 ​​^ ই সিকোয়েন্সের সাথে 630 এবং তার অনুক্রমের সাথে 641 অঙ্কে পৌঁছে যায়। প্রচুর প্রতিবাদ ছাড়াই কমপ্যাক্ট অল-পাইথন কোডের জন্য খুব চিত্তাকর্ষক।


এই মডিউলটি কত দ্রুত তা আমি এখনও উঠতে পারি না। এটি একটি সংখ্যা-ক্রাঞ্চিংয়ের সরঞ্জাম হিসাবে পার্লের প্রতি আমার আগ্রহকে প্রশ্রয় দিয়েছে। আমি বর্তমানে Math::GMPএমনভাবে পুনর্লিখন করছি যা এমপিজেড রেফারেন্স তৈরি / ধ্বংসের সাথে যথেষ্ট অপ্রয়োজনীয় নয়।
প্রিমো

আসল কাজটি সমস্ত সি + জিএমপিতে, সুতরাং এটি পাইথনেও কাজ করতে পারে। বড় সংখ্যার জন্য পার্থ 5 এর চেয়ে পাইথনের কিছু গুরুতর সুবিধা রয়েছে, আমি আশা করি সমাধান করা যেতে পারে। ম্যাথ :: জিএমপিজেড, যাইহোক, গণিত :: জিএমপির চেয়ে দ্রুত এবং মূলত পুরো এমপিজেড এপিআই প্রকাশিত হয়েছে, যদিও কখনও কখনও কল করতে আরও ভঙ্গুর এবং কিছুটা অদ্ভুত থাকে। ম্যাথের কিছু জিনিস ঠিক করা: GMP আমার আরও অনেক অন্যান্য বিষয়ের পিছনে তালিকায় রয়েছে। এমপিইউ, আমি বিকাশটি উল্টানোর বিষয়ে চিন্তা করেছি এবং এটি দুটি সি লাইব্রেরিতে তৈরি করব, তারপরে পার্ল মডিউলটি কেবল এটি ব্যবহার করুন। এটি অন্য কোথাও ব্যবহার করতে সহায়তা করবে।
দানাজে

আমি ভাল অগ্রগতি করছি। নিম্নলিখিত লুপ রান যত দ্রুত 10 বার , কেবলমাত্র ভাল রেফারেন্স ব্যবস্থাপনা কারণে: $x = new Math::GMP(0); $x += 3 for 1..1000000। আমি শেষ হয়ে গেলে সিপিএন পোস্ট করব; আপনি জানতে
প্রিমো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.