সোফি জার্মেইন প্রাইমদের তালিকা করুন


10

প্রশ্নটি

একটি সোফি জার্মেইন প্রাইম এমন একটি প্রধান p যা 2p + 1 প্রাইমও । উদাহরণস্বরূপ, 11 হ'ল একটি সোফি জার্মেইন প্রাইম কারণ 23 টিও প্রধান। আরোহণের ক্রমে সোফি জার্মেইন প্রাইমগুলি গণনা করার জন্য সংক্ষিপ্ততম প্রোগ্রামটি লিখুন

বিধি

  • সোফি জার্মেইন প্রাইমগুলি অবশ্যই আপনার প্রোগ্রাম দ্বারা উত্পন্ন করা উচিত , বাহ্যিক উত্স থেকে নয়।
  • আপনার প্রোগ্রামটি অবশ্যই 2³²-1 এর নীচে সমস্ত সোফি জার্মেইন প্রাইমগুলি গণনা করবে
  • আপনার প্রোগ্রামটি খুঁজে পেতে আপনাকে অবশ্যই প্রতিটি স্বতন্ত্র সোফি জার্মেইন মুদ্রণ করতে হবে।
  • সর্বনিম্ন স্কোর প্রাপ্ত ব্যক্তিটি জিতে যায়

স্কোরিং

  • আপনার কোড বাইট প্রতি 2 পয়েন্ট
  • -10 যদি আপনি 2³²-1 এর চেয়ে বড় আপনার প্রোগ্রাম দ্বারা উত্পন্ন একটি প্রধান প্রদর্শন করতে পারেন

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
মার্টিন ইন্ডার

উত্তর:


4

CJam

17 টি অক্ষরের জন্য আমরা 2 ^ 32 অবধি সম্পূর্ণ গণনা পাই:

G8#,{_mp*2*)mp},`

আরও 4 টি চর জন্য, আমরা 2 ^ 32 এর চেয়ে বেশি এসজি প্রাইম অন্তর্ভুক্ত করার জন্য যথেষ্ট বড় একটি পরিসর পেয়েছি:

G8#K_*+,{_mp*2*)mp},`

4294967681 = 2 ^ 32 + 385 <2 ^ 32 + 400 থেকে।

অবশ্যই, আমরা সমভাবে বিনামূল্যে হিসাবে পরিসীমা প্রসারিত করতে পারে

C9#,{_mp*2*)mp},`

এর অর্থ আপনি এটি 17 টি অক্ষরের জন্য বোনাস ছাড়াই বা 21 টি অক্ষরের বোনাস ছাড়াই জমা দিতে পারেন
মেও মিক্স

@ ব্যবহারকারী3502615, বা 17 টি অক্ষরের বোনাস সহ। যদিও এসজি প্রাইম আই তালিকার তালিকাটি আসলে "আমার প্রোগ্রাম দ্বারা" উত্পন্ন হয়েছিল কিনা তা বিতর্কযোগ্য, কারণ আমার এতদূর চালানোর মতো শক্তিশালী কম্পিউটার নেই।
পিটার টেলর

I,একইরূপে Iএকটি স্বাক্ষরিত 32 বিট পূর্ণসংখ্যা হিসাবে, তাই সর্বোচ্চ মান Iহয় 2 ** 31 - 1
ডেনিস

2
@ ডেনিস, এটি কি ভাষার কোনও নথিভুক্ত সম্পত্তি বা জাভা প্রয়োগের কোনও বাস্তবায়নের গৌরব?
পিটার টেলর

এটি নথিভুক্ত নয়, তবে আচরণটি জাভা এবং অনলাইন অনুবাদক উভয়ের জন্যই সামঞ্জস্যপূর্ণ।
ডেনিস

3

পাইথ, 19 বাইট * 2 - 10 = 28

নোট করুন যে অনলাইন সংকলক / নির্বাহক আউটপুট দেখায় না কারণ এটি একটি অসীম লুপ।

K1#~K1I&!tPK!tPhyKK

ব্যাখ্যা:

K1                      K=1
  #                     While true:
   ~K1                  K+=1
      I                 If
       &                logical AND
        !tPK            K is prime
            !tPhyK      2*K+1 is prime (y is double, h is +1)
                  K     Print K

PZসত্যবাদী বা মিথ্যা মান দেয় না। এটি প্রাইম ফ্যাক্টরাইজেশন প্রদান করে Z। প্রাইমটির জন্য পরীক্ষা করা হচ্ছে !tPZ, যা প্রধান কার্যকারীর মধ্যে কেবল একটি ফ্যাক্টর রয়েছে কিনা তা পরীক্ষা করে।
জাকুবে

হ্যাঁ. এখন এটা কাজ করছে. !tPভুল 0এবং 1যদিও প্রধান হতে হবে, যেহেতু তাদের প্রাথমিক ফ্যাক্টরাইজেশনটিতে কেবল 1 ফ্যাক্টর রয়েছে। সহজ ফিক্স সমস্ত প্রতিস্থাপন হয় Zদ্বারা Kএবং দায়িত্ব অর্পণ K2শুরুতে।
জাকুব

কিছু অন্যান্য গল্ফ: K1পরিবর্তে বরাদ্দ করুন K2, এবং যদি এবং ইনক্রিমেন্টটি অদলবদল করুন। এভাবে আপনি মুছে ফেলতে পারেন )। এবং +1*K2হিসাবে একই জিনিস hyK
জাকুব

আহ, আমি টিউটোরিয়াল পৃষ্ঠায় কেবল তাদের সম্পর্কে পড়েছি। এটি কি আপনার জন্য কাজ করে pyth.herokuapp.com/?code=K2%23I%26!tPK!tPhyKK)deK1&debug=0
mbomb007

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

1

পাইথ - 2 * 16 বাইট - 10 = 22

পাইথের সাথে প্রাইম চেকিংয়ের প্রথাগত পদ্ধতি ব্যবহার করে !tPএবং এটি একবারে দু'বার পরীক্ষা করার জন্য সামান্য কৌশল সহ এটি নম্বর এবং এর নিরাপদ-প্রাইম উভয়কেই প্রয়োগ করে। উপরে যায় 10^10, তাই আমি বোনাসের জন্য যাচ্ছি।

f!+tPTtPhyTr2^TT

ব্যাখ্যা শীঘ্রই আসছে।

f          r2^TT     Filter from 2 till 10^10
 !                   Logical not to detect empty lists
  +                  List concatenation
   tP                All but the firs element of the prime factorization
    T                The filter element
   tP                All but the firs element of the prime factorization
    hyT              2n+1

অনলাইনে 1000 এর নিচে চেষ্টা করুন


1
এটি প্রায় 40 গিগাবাইট র‌্যাম মেমরি সহ একটি মেশিন নেয়। বেশ দক্ষ ;-)
জাকুব 21 '13

আপনি যদি সফলভাবে কোডটি চালনা না করেন তবে আপনি - 10 দাবি করতে পারবেন বলে আমি মনে করি না?
orlp

@ ওর্পল্ট নং, আমি ওপিকে জিজ্ঞাসা করেছি এবং তিনি বলেছিলেন যে এই পরিসরটি আরও ছোট করা এবং পুরো প্রোগ্রামটি অনুকরণ করা যথেষ্ট হবে: chat.stackexchange.com/transcript/message/21585393#21585393
মালটিসেন

1
#include<stdio.h>
#include<math.h>

int isprime(int);
int main(){
    int check,n,secondcheck;
    printf("enter how long you want to print\n");
    scanf("%d",&n);
    for(int i=2;i<n;i++){
        check = isprime(i);
        if(check==0){
        secondcheck = isprime(2*i+1);
        if(secondcheck==0){
        printf("%d\t",i);
        }
        else
        continue;
        }
    }
}
int isprime(int num){   
    int check = num,flag=0;
     num = sqrt(num);
    for(int i=2;i<=num;i++){
        if(check%i==0){
            flag=1;
            return 1;
        }
    }
    if(flag==0){
        return 0;
    }
}

3
দয়া করে আপনার প্রোগ্রামটি গলফ করার কথা বিবেচনা করুন (স্পেস .. ইত্যাদি সরিয়ে) এবং আপনি কতদূর যেতে পারবেন তা দেখুন।
Mhmd

0

সিজেম, 34 (2 * 22 - 10)

C9#{ImpI2*)mp&{Ip}&}fI

অধীনস্থ সকল সোফি জার্মেই মৌলিক মুদ্রণ 12 ** 9, যার মধ্যে 4294967681 > 2 ** 32

আমার অনুমান যে এটি আমার মেশিনে প্রায় 8 ঘন্টা সময় নেবে। আমি আজ রাতে চালাব।


0

হাস্কেল, 2 * 54-10 = 98 132

i a=all((>0).rem a)[2..a-1]
p=[n|n<-[2..],i n,i$2*n+1]

iএকটি প্রধান পরীক্ষা। উভয় এবং প্রধান হয় যেখানে pসমস্ত সংখ্যা লাগে । একটি অসীম তালিকা।nn2*x+1p

সম্পাদনা করুন: 2*n+1প্রাইম কিনা তা পরীক্ষার জন্য আরও ভাল উপায় ।


0

জুলিয়া, 2 * 49 - 10 = 88

p=primes(2^33)
print(p[map(n->isprime(2n+1),p)])

এগুলি তালিকা বিন্যাসে মুদ্রণ করে [2,3,5,11,...],। যদি সেই ফর্ম্যাটটি, primesফাংশনটি ব্যবহার করে , বা মুদ্রণের জন্য সমস্ত গণনা শেষ না হওয়া পর্যন্ত অপেক্ষা করা গ্রহণযোগ্য না হয় তবে এটি চলমান চলাকালীন তাদের প্রতি লাইনে একটি মুদ্রণ করে।

isprime=f
for i=1:2^33;f(i)&&f(2i+1)&&println(i)end

এটি কিছুটা দীর্ঘ, 52 টি অক্ষর। উভয়ই সমস্ত সোফি জার্মেইন প্রাইমগুলি গণনা করে 2^33, সুতরাং তাদের 10 পয়েন্ট ছাড় দেওয়া উচিত।


0

পাইথন 3, 124 123 বাইট

i=3
q=[2]
while 1:
 p=1
 for x in range(2,round(i**.5)+1):p=min(p,i%x)
 if p:
  q+=[i];s=(i-1)/2
  if s in q:print(s)
 i+=2

এটা কিভাবে কাজ করে?

i=3                                 # Start at 3
q=[2]                               # Create list with first prime (2), to be list of primes.
while 1:                            # Loop forever
 p=1                                # Set p to 1 (true)
 for x in range(2,round(i**0.5)+1): # Loop from 2 to the number's square root. x is the loop value
     p=min(p,i%x)                   # Set p to the min of itself and the modulo of
                                    # the number being tested and loop value (x).
                                    # If p is 0 at the end, a modulo was 0, so it isn't prime.
 if p:                              # Check if p is 0
  q+=[i]                            # Add the current number (we know is prime) to list of primes (q)
  s=(i-1)/2                         # Generate s, the number that you would double and add 1 to make a prime.

  if s in q:print(s)                # If (i-1)/2 is a prime (in the list), then that prime satifies
                                    # the condition 2p+1 is prime because i is 2p+1, and i is prime
 i+=2                               # Increment by 2 (no even numbers are prime, except 2)

এটি এখানে অনলাইনে চেষ্টা করুন


আমার কম্পিউটার বলছে এটি 2 ^ 32 এর নীচে সমস্ত সোফি জার্মেইন প্রাইমগুলির 0.023283% উত্পন্ন করেছে।

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


.5এর চেয়ে সংক্ষিপ্ত0.5
mbomb007

0

পার্ল, 2 * 57-10 = 104

use ntheory":all";forprimes{say if is_prime(2*$_+1)}2**33

2
3
5
11
...
8589934091
8589934271

42 সেকেন্ড থেকে 2 ^ 32, 1 মি 26 সে থেকে 2 ^ 33। 2*$_+1হিসাবে লেখা থাকলে 50% দ্রুত চালিত হবে 1+$_<<1তবে এটি আরও একটি বাইট।

মডিউলটি ইনস্টল করে primes.plযার মধ্যে সোফি-জার্মেইন প্রাইমস সহ অনেকগুলি ফিল্টার রয়েছে। সুতরাং: primes.pl --so 2**33(20 বাইট)


0

রুবি, 61 * 2 - 10 = 112

require'prime';Prime.each(1.0/0)do|n|p Prime.prime?(n*2+1)end

2 ** 32 অবধি সমস্ত মান মুদ্রণ করতে চিরকাল লাগবে

সম্পাদন করা

1.0 / 0 এর জন্য ফ্লোট :: INFINITY প্রতিস্থাপন করে কয়েকটি বাইট বন্ধ করে দেওয়া হয়েছে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.