বিপরীত এবং অবক্ষয় যোগ করুন


22

ইন্ট্রো

বিপরীত করা এবং যুক্ত করা যতটা সহজ লাগে ততই সরল, nবিপরীত ক্রমে এটিকে তার অঙ্কগুলিতে যোগ করুন। (যেমন 234 + 432 = 666)।

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

উদাহরণ

আমি বর্তমানে আছে

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 এবং এর বিপরীতে multiple সুতরাং বিপরীত এবং 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 টির একাধিক হিট হওয়ার আগে যদি এটি কোনও প্রাইমকে আঘাত না করে তবে এটি কখনও প্রাইমকে আঘাত করতে পারে না।


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

@ ডবিফ্রি-এলফ আমার মনে হয় এই সমস্যা এবং টিপিকাল "কোডিং" সমস্যার মধ্যে পার্থক্য হ'ল প্রায়শই পরেরটির জন্য, অ্যালগরিদমটি বাস্তবায়িত হওয়া সুস্পষ্ট এবং এটি যতটা সম্ভব সামান্য কোডে করা কেবল বিষয়। এই চ্যালেঞ্জ আপনাকে স্ক্র্যাচ থেকে একটি অ্যালগরিদম নিয়ে আসতে বাধ্য করে। উভয়ই তাদের নিজস্ব অনন্য ধাঁধা পোজ করে তবে উভয়ই শেষ পর্যন্ত এখনও কোডিংয়ের সমস্যা।
গম উইজার্ড

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

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

আমিও এর সাথে একমত তবে এই চ্যালেঞ্জের জন্য অ্যালগরিদমের গাণিতিক মান আরও থাকবে। প্রত্যেকটি সম্ভাব্য ইনপুট দিয়ে সঠিক ফলাফলের গ্যারান্টি দিতে কাউকে প্রমাণিত গাণিতিক উপপাদ্যগুলি তৈরি করতে হবে বা তৈরি করতে হবে, যা আমার মতে গণিতবিদরা যা করেন। ব্রুট ফোর্স ইত্যাদির মতো সাধারণ পদ্ধতিগুলি এই ক্ষেত্রে কাজ করবে না।
অর্জুন

উত্তর:


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}

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

যদি আমি এটি সঠিকভাবে পেলাম, যখন আমরা ১১ এর একাধিকতে পৌঁছাতে পারি তখন আমরা থামতে পারি (এর পরে আমরা কেবল ১১ এর গুণক পাব)


আরও কিছু শক্তিশালী আছে যা আমরা স্পোলারটিতে থাকা তথ্য দিয়ে প্রমাণ করতে পারি।
গম উইজার্ড

3

হাস্কেল , 65 বাইট

fনেয় Integerএবং ফেরত দেয় a BoolTrueমানে এটি একটি প্রাইমে পৌঁছেছে।

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

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

দুর্ভাগ্যক্রমে সংক্ষিপ্ত কিন্তু অদক্ষ প্রাইম টেস্টের অর্থ হ'ল ওপি'র Trueপরীক্ষার কেসগুলি 11শেষ করতে খুব বেশি বড় হয়। তবে উদাহরণস্বরূপ 11432 একটি Trueমামলা যা শেষ করে।

আপনি এই 3 বাইট দীর্ঘ আর চেষ্টা করতে পারেন, যার জন্য টিআইও সমস্ত Trueপরীক্ষার কেস শেষ করতে পারে:

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

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

উভয় সংস্করণের প্রাইম টেস্টগুলি 1 এ বিভক্ত হয়, তবে এটি এমন হয় যে এটি যে কোনও উপায়ে (2) এ যায়।

অন্যথায়, আমি রুবি জমা দেওয়ার বিলোপকারী হিসাবে জিবি হিসাবে একই জিনিস সম্পর্কে লক্ষ্য করেছি:

একবার সংখ্যার দৈর্ঘ্যে বৃদ্ধি পেলে পরবর্তী পুনরাবৃত্তিটি ১১ দ্বারা বিভাজ্য হবে a


@ ওয়েইট উইজার্ড ওয়েল এর থেকে বোঝা যাচ্ছে যে পুনরাবৃত্তির সংখ্যাটি সীমাবদ্ধ, (দুঃখিত, মন্তব্যে কোনও স্পয়লার ট্যাগ নেই) আমার মনে হয় যাচাই করার জন্য সর্বোচ্চ 6 টি পদক্ষেপ (উদাহরণস্বরূপ 100 সর্বোচ্চ)। সংক্ষেপে চেষ্টা করে দেখছি, যদিও এটি আমাকে একটি ছোট সমাধান দেবে বলে মনে হচ্ছে না। আপনি কি এর চেয়ে আরও শক্তিশালী কিছু বলতে চান?
janrjan জোহানসেন

না এটি ছিল 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 যদি এটি না হয় 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 এর একাধিকতে পৌঁছে যাবে

এই প্রোগ্রামটি চার্চযুক্ত লজিকাল তুলনা সহ একটি পুনরাবৃত্ত ল্যাম্বদা। এটি প্রথমে এন প্রাইম কিনা তা যাচাই করে।

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

এটি সত্য হলে আমরা সত্য ফিরে আসি।

এটি মিথ্যা হলে আমরা এটি 11 এর একাধিক কিনা তা পরীক্ষা করে দেখি।

x%11

মিথ্যা যদি আমরা মিথ্যা প্রত্যাবর্তন করি অন্যথায় আমরা fপরবর্তী পুনরাবৃত্তির ফলাফল প্রদান করি

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

2

এই উত্তরটি যে কারও পড়ার আগ্রহের জন্য, শেষটিও Sহতে পারে TRD$+$হতে পারে +RD$$বা RD+<newline>Ç(সমস্ত তুচ্ছ পরিবর্তন)
হাইপারনিউটারিনো

@ হাইপারনিউট্রিনো S কারণ এতে>> 1 দেখানোর সম্ভাবনা কম রয়েছে। এখানে নেই RD, ন্যায়সঙ্গত ṚḌ, এবং আমি ṚḌ$+$এটি পছন্দ করেছিলাম যাতে আমি এটি আরও ভালভাবে সংগঠিত করতে পারি।
এরিক আউটগল্ফার

আমি বিন্দু রাখতে খুব অলস ছিল; আমি জানি তুমি কেন রেখেছ S; আমার এটি করা উচিত ছিল T, তবে এটি বেশিরভাগই সবার আগ্রহের জন্য।
হাইপারনিউটারিনো

1

05 এ বি 1 ই , 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

ম্যাটল্যাব, 88 81 বাইট

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

0

জাভাস্ক্রিপ্ট (ES6), 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

মাইক্রোসফ্ট SQL সার্ভার, 826 786 * বাইট

* আমি মাইক্রোসফ্ট এসকিএল সার্ভার ২০১২ সালে প্রবর্তিত আইআইএফ ফাংশনটির কথা স্মরণ করেছি

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*/মন্তব্য?
এ্যাসোলং ফল

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

আপনি তাদের মুছতে পারেন?
ফল

হ্যাঁ অবশ্যই, মন্তব্যগুলি মুছতে পারে।
আন্দ্রে ওদেগোভ

আপনি ইনপুটগুলিকে হার্ড কোড করেছেন বলে মনে হচ্ছে। আমি খুব নিশ্চিত নই, তবে আমি মনে করি গ্রহণযোগ্য ইনপুট ফর্ম্যাটটি তার পরিবর্তে একটি টেবিল থেকে তাদের নির্বাচন করছে
জো কিং


0

পিএইচপি 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 );

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

আমি এই জিনিসটি বাইট গণনা করার জন্য ব্যবহার করেছি ।


আহ ঠিক আছে, এটি শেষ করা উচিত। আমি তখন প্রশ্নটি ভুল বুঝেছিলাম। ভুয়া-ওয়াই মামলার সমাপ্তির জন্য প্রশ্ন সম্পাদনা করেছে।
অ্যান্ড্রু

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