उलटा और पतित जोड़ें


22

पहचान

रिवर्स और ऐड उतना ही सरल है जितना लगता है, nरिवर्स ऑर्डर में इसे अपने अंकों में ले और जोड़ दें। (उदा। २३४ + ४३२ = ६६६)।

यदि आप इस प्रक्रिया को बार-बार लागू करते हैं तो कुछ संख्याएँ अंततः एक अभाज्य संख्या से टकराएँगी, और कुछ कभी भी अभाज्य तक नहीं पहुँचेंगी।

उदाहरण

मेरे पास वर्तमान में है

11431 प्रतिनिधि।

11431 is not prime
11431 + 13411 = 24842 which is not prime
24842 + 24842 = 49684 which is not prime
49684 + 48694 = 98378 which is not prime
98378 + 87389 = 185767 which is prime!

यह संख्या एक प्राइम हिट करती है

इसके विपरीत 3 में से कोई भी एक प्राइम में कभी भी हिट नहीं होगा, ऐसा इसलिए है क्योंकि 3 के सभी गुणकों में एक अंक योग होता है जो कि 3 का एक गुणन होता है और इसके विपरीत। इस प्रकार 3 के कई पर उल्टा और जोड़ें हमेशा 3 के एक नए एकाधिक में परिणाम देगा और इस प्रकार कभी भी प्रधान नहीं होगा।

कार्य

एक सकारात्मक पूर्णांक लें nऔर निर्धारित करें कि बार-बार उलटने और जोड़ने से कभी भी अभाज्य संख्या आएगी। एक सत्य या मिथ्या मूल्य का उत्पादन। या तो के लिए एक प्रमुख और मिथ्या मूल्य तक पहुँचता है या दोनों के आसपास दूसरे तरीके स्वीकार्य हैं के लिए सच्चाई।

प्राइम नंबर को शून्य पुनरावृत्तियों में एक प्रमुख संख्या तक पहुंचने के लिए माना जाएगा।

यह इसलिए अपने कोड को यथासंभव छोटा बनाने का प्रयास करें।

परीक्षण के मामलों

एक प्रधानमंत्री के लिए सच एक झूठ तक पहुंचता है एक प्रधानमंत्री के लिए कभी नहीं पहुंचता है

11 -> True
11431 -> True
13201 -> True
13360 -> True
13450 -> True
1019410 -> True
1019510 -> True
22 -> False
1431 -> False
15621 -> False
14641 -> False

संकेत

जब मैं इस चुनौती को लिख रहा था तो मुझे एक अच्छी चाल का पता चला जिसने इस समस्या को आसान बना दिया। इस ट्रिक के बिना यह असंभव नहीं है और यह इसके साथ तुच्छ नहीं है लेकिन यह मदद करता है। मुझे इसकी खोज करने में बहुत मज़ा आया इसलिए मैं इसे एक स्पॉइलर में छोड़ दूंगा।

बार-बार उल्टा और जोड़ना हमेशा 6 पुनरावृत्तियों या उससे कम में 11 से अधिक का मारा जाएगा। अगर यह प्राइम को हिट नहीं करता है, तो इससे पहले कि यह 11 से अधिक हिट करे, यह कभी भी प्राइम को हिट नहीं करेगा।


मुझे यह एक कोडिंग की तुलना में गणितीय समस्या से अधिक लगता है। मुझे लगता है कि कोड की समस्याओं के विशिष्ट नियम हैं जो कोड में उत्तरदाता द्वारा लागू किए जाते हैं; मुझे नहीं लगता कि इस चुनौती के मामले में ऐसा है।
अर्जुन

@ DobbyTheFree-Elf मुझे लगता है कि इस समस्या और विशिष्ट "कोडिंग" समस्याओं के बीच का अंतर यह है कि अक्सर बाद के लिए, एल्गोरिथ्म को लागू किया जाना स्पष्ट है और यह जितना संभव हो उतना कम कोड में करने की बात है। यह चुनौती आपको खरोंच से एक एल्गोरिथ्म के साथ आने के लिए मजबूर करती है। दोनों ने अपनी-अपनी अनोखी पहेलियां बनाईं लेकिन दोनों ही अब भी कोडिंग की समस्या हैं।
गेहूं जादूगर

मैं आपकी उस टिप्पणी से सहमत हूं, लेकिन मेरी राय में, इस चुनौती में मौजूद ऐसे एल्गोरिदम के साथ आना एक प्रोग्रामर की तुलना में गणितज्ञ का काम अधिक है। मुझे नहीं पता कि दूसरे क्या सोचते हैं, लेकिन यह कम से कम मुझे क्या लगता है। तो, यह मेरा पतन है।
अर्जुन

1
@ DobbyTheFree-Elf मुझे आपसे इसे तोड़ने से नफरत है लेकिन एक अच्छे प्रोग्रामर होने के एक महत्वपूर्ण हिस्से में एक समस्या को हल करने के लिए कुशल एल्गोरिदम खोजना।
गेहूं जादूगर

मैं इससे सहमत भी हूं। लेकिन इस चुनौती के लिए एल्गोरिथ्म में अधिक गणितीय मूल्य होगा। हर संभव इनपुट के साथ एक सही आउटपुट की गारंटी के लिए सिद्ध गणितीय प्रमेयों को खोजना या बनाना होगा, जो मेरी राय में गणितज्ञ करते हैं। ब्रूट फोर्स आदि जैसे सामान्य दृष्टिकोण इस मामले में काम नहीं करेंगे।
अर्जुन

जवाबों:


7

रूबी , 84 79 77 74 बाइट्स

->x{y=1;x+="#{x}".reverse.to_i while(2...x).any?{|z|0==y=x%z}&&x%11>0;y>0}

इसे ऑनलाइन आज़माएं!

अगर मुझे यह सही लगता है, जब हम 11 के कई तक पहुंचते हैं तो हम रोक सकते हैं (हम केवल उसके बाद 11 के गुणक प्राप्त करेंगे)


कुछ और अधिक शक्तिशाली है जो हम बिगाड़ने में जानकारी के साथ साबित कर सकते हैं।
गेहूं जादूगर

3

हास्केल , 65 बाइट्स

fएक लेता है Integerऔर एक रिटर्न देता है BoolTrueइसका मतलब यह एक प्रमुख तक पहुँचता है।

f n=gcd(product[2..n-1])n<2||gcd 33n<2&&f(n+read(reverse$show n))

इसे ऑनलाइन आज़माएं!

दुर्भाग्य से लघु लेकिन अकुशल प्राइम टेस्ट का मतलब है कि ओपी का Trueपरीक्षण 11समाप्त होने के अलावा और भी बड़े मामले हैं । लेकिन उदाहरण के लिए 11432 एक Trueऐसा मामला है जो खत्म होता है।

आप इस 3 बाइट्स को एक बार आज़मा सकते हैं, जिसके लिए TIO सभी Trueपरीक्षण मामलों को समाप्त कर सकता है :

f n=and[mod n i>0|i<-[2..n-1]]||gcd 33n<2&&f(n+read(reverse$show n))

इसे ऑनलाइन आज़माएं!

दोनों संस्करणों के प्राइम टेस्ट 1 पर टूटते हैं, लेकिन ऐसा होता है कि यह वैसे भी एक प्राइम (2) तक पहुंच जाता है।

अन्यथा, मैंने रूबी प्रस्तुत करने वाले के बिगाड़ने में जीबी के समान चीज़ के बारे में देखा:

एक बार जब कोई संख्या और भी बढ़ जाती है, तो अगला पुनरावृत्ति 11. से विभाज्य हो जाएगा। एक बार एक संख्या 11 से विभाज्य हो, तो सभी पुनरावृत्तियों का अनुसरण करेंगे।


@WheatWizard इसका तात्पर्य है कि पुनरावृत्तियों की संख्या बंधी हुई है, (क्षमा करें, टिप्पणियों में कोई स्पॉइलर टैग नहीं है) अधिकतम 6 चरण मुझे लगता है कि जांच करने के लिए चरण (जैसे 100 अधिकतम है)। संक्षेप में, यह मुझे एक छोटा समाधान देने के लिए प्रतीत नहीं होता है, हालांकि। क्या आपका मतलब इससे ज्यादा शक्तिशाली है?
अर्जन जोहान्सन

कोई है कि यह 6 था अधिकतम है
गेहूं जादूगर

3

पायथन 2, 123 110 बाइट्स

अर्जन जोहान्सन और गेहूं जादूगर के लिए 13 बाइट्स का धन्यवाद !

n=input()
while 1:
 if all(n%m for m in range(2,n)):print 1;break
 if n%11==0:print 0;break
 n+=int(`n`[::-1])

अगर यह नहीं होता है, तो यह 1, 0 तक पहुँचता है। इसे ऑनलाइन आज़माएं!


2

पायथन 2 , 78 70 69 बाइट्स

f=lambda x:all(x%a for a in range(2,x))or x%11and f(x+int(`x`[::-1]))

इसे ऑनलाइन आज़माएं!

व्याख्या

यह कार्यक्रम इस तथ्य पर निर्भर करता है कि

हर संख्या जो हमेशा के लिए खो जाती है, 6 से कम चालों में 11 के कई तक पहुंच जाएगी

यह कार्यक्रम परिचालित तार्किक तुलनात्मकता के साथ एक पुनरावर्ती मेमना है। यह पहले जाँचता है कि क्या n अभाज्य है।

all(x%a for a in range(2,x))

अगर यह सच है तो हम सच लौटाते हैं।

यदि यह गलत है, तो हम जांचते हैं कि यह 11 का गुणज है।

x%11

यदि झूठे हम झूठे लौटते हैं अन्यथा हम fअगले पुनरावृत्ति पर परिणाम लौटाते हैं

f(x+int(`x`[::-1]))

2

जेली , 11 बाइट्स

ṚḌ$+$6СÆPS

इसे ऑनलाइन आज़माएं!


इस उत्तर को पढ़ने वाले किसी भी व्यक्ति के हित के लिए, अंतिम भी Sहो सकता है TRD$+$भी हो सकता है +RD$$या RD+<newline>Ç(सभी तुच्छ संशोधन)
हाइपरन्यूट्रिनो

@ हायपरनेटिनो मैंने Sइसलिए चुना क्योंकि इसमें कुछ भी दिखाने की संभावना कम है> 1। कोई नहीं है RD, बस ṚḌ, और मैंने चुना ṚḌ$+$ताकि मैं इसे बेहतर तरीके से व्यवस्थित कर सकूं।
.:१ E पर आउटगॉल्फ

मैं डॉट्स में डालने के लिए बहुत आलसी था; मुझे पता है तुम क्यों डालते हो S; मुझे उस ओवर को चुनना चाहिए था T, लेकिन यह ज्यादातर हर किसी के हित के लिए था।
HyperNeutrino

1

05AB1E , 14 13 बाइट्स

संपादित करें : यदि इनपुट ढेर पर पर्याप्त तत्व नहीं हैं, तो एक बाइट सहेजा जाता है

[Dp#D11Ö#R+]p

इसे ऑनलाइन आज़माएं!

प्रश्न में संकेत का उपयोग करता है

यह काम किस प्रकार करता है

[              # begin infinite loop
               # implicit input
 D             # duplicate input
  p            # push primality of input
   #           # if prime, break
    D          # duplicate input
     11        # push 11
       Ö       # push input % 11 == 0
        #      # if multiple of 11, break
               # implicit push input
          R    # reverse input
           +   # add both numbers
            ]  # end infinite loop
             p # push primality of result; 1 if prime, 0 if multiple of 11
               # implicit print

0

MATLAB, 88 81 बाइट्स

function r=f(n);r=0;for i=1:7 r=r+isprime(n);n=n+str2num(fliplr(num2str(n)));end;

0

जावास्क्रिप्ट (ईएस 6), 73 बाइट्स

लौटाता है 0या true

f=n=>{for(d=n;n%--d;);return d<2||n%11&&f(+[...n+''].reverse().join``+n)}

टिप्पणी की गई

यह गेहूं जादूगर द्वारा वर्णित जादू-बिगाड़ने वाले फार्मूले पर आधारित है।

f = n => {              // given n:
  for(d = n; n % --d;); // find the highest divisor d of n
  return                //
    d < 2 ||            // if this divisor is 1, return true (n is prime)
    n % 11 &&           // else: if 11 is a divisor of n, return 0
    f(                  // else: do a recursive call with
      +[...n + '']      // the digits of n
      .reverse().join`` // reversed, joined,
      + n               // coerced to a number and added to n
    )                   //
}                       //

परीक्षण के मामलों

मैंने स्निपेट से दो सबसे बड़े इनपुट हटा दिए हैं, क्योंकि उन्हें पूरा करने में कुछ सेकंड लगते हैं। (लेकिन वे काम भी करते हैं।)



0

Microsoft Sql सर्वर, 826 786 * बाइट्स

* मैंने IIF फ़ंक्शन के बारे में याद किया है जो Microsoft Sql Server 2012 में पेश किया गया था

set nocount on
use rextester
go
if object_id('dbo.n','IF')is not null drop function dbo.n
go
create function dbo.n(@ bigint,@f bigint)returns table as return
with a as(select 0 c union all select 0),b as(select 0 c from a,a t),c as(select 0 c from b,b t),
d as(select 0 c from c,c t),e as(select 0 c from d,d t),f as(select 0 c from e,e t),
v as(select top(@f-@+1)0 c from f)select row_number()over(order by(select 0))+@-1 n from v
go
with u as(select cast(a as bigint)a from(values(11),(11431),(13201),(13360),(13450),(1019410),(1019510),(22),(1431),
(15621),(14641))u(a)),v as(select a,a c from u union all select a,c+reverse(str(c,38))from v
where 0=any(select c%n from dbo.n(2,c/2))and c%11>0)select a,iif(0=any(select max(c)%n from dbo.n(2,max(c)/2)),0,1)
from v group by a option(maxrecursion 0)

इसे ऑनलाइन जांचें

अधिक साफ स्वरूपण

SET NOCOUNT ON;
USE rextester;
GO
IF OBJECT_ID('dbo.n', 'IF') IS NOT NULL DROP FUNCTION dbo.n;
GO
CREATE FUNCTION dbo.n(@ BIGINT,@f BIGINT)RETURNS TABLE AS RETURN
  WITH
    a AS(SELECT 0 c UNION ALL SELECT 0),
    b AS(SELECT 0 c FROM a,a t),
    c AS(SELECT 0 c FROM b,b t),
    d AS(SELECT 0 c FROM c,c t),
    e AS(SELECT 0 c FROM d,d t),
    f AS(SELECT 0 c FROM e,e t),
    v AS(SELECT TOP(@f-@+1)0 c FROM f)
    SELECT ROW_NUMBER()OVER(ORDER BY(SELECT 0))+@-1 n FROM v;
GO
WITH u AS(
  SELECT CAST(a AS BIGINT) a
  FROM(VALUES (11), (11431), (13201), (13360), (13450), (1019410), (1019510),
              (22), (1431), (15621), (14641)) u(a)
),
v AS(
  SELECT a, a c FROM u
    UNION ALL
  SELECT a, c + reverse(str(c, 38))
  FROM v
  WHERE 0 = ANY(SELECT c % n FROM dbo.n(2, c / 2)) AND c % 11 > 0
)
SELECT a, IIF(0 = ANY(SELECT MAX(c) % n FROM dbo.n(2, MAX(c) / 2)), 0, 1)
FROM v
GROUP BY a
OPTION (MAXRECURSION 0);

क्या आपको टिप्पणियों /*true*/और /*false*/टिप्पणियों की आवश्यकता है ?
19:08 पर फल

यह टिप्पणी है कि अपेक्षित परिणाम के अनुसार इनपुट डेटा को अलग करने के लिए उपयोग किया जाता है।
आंद्रेई ओडेगो

क्या आप उन्हें हटा सकते हैं?
एगलैंगिंग फ्रूट

हां, टिप्पणी को हटाया जा सकता है।
आंद्रेई ओडेगो

आपको हार्ड कोडित इनपुट्स दिखाई देते हैं। मुझे भी यकीन नहीं है, लेकिन मुझे लगता है कि एक स्वीकार्य इनपुट प्रारूप इसके बजाय उन्हें एक तालिका से चुन रहा है
जो किंग


0

PHP 114 बाइट्स

<?php function f($n){$n1=strrev((string)$n);$r=$n+(int)$n1;for($i=2;$i<$r;$i++){if($r%$i==0){die('0');}}die('1');}

अधिक पठनीय संस्करण:

<?php function f($n)
{
    $n1 = strrev((string)$n);
    $r = $n + (int)$n1;
    for ($i = 2; $i < $r; $i++) {
        if ($r % $i == 0) {
            die('0');
        }
    }
    die('1');
}

f(11431 );

इसे ऑनलाइन आज़माएं!

मैंने इस चीज़ का इस्तेमाल बाइट्स गिनने के लिए किया ।


आह ठीक है, इसे समाप्त करना चाहिए। मैंने तब सवाल गलत समझा। झूठे-वाई मामलों को समाप्त करने के लिए प्रश्न का संपादन किया।
एंड्रयू

n
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.