গণিত, 70 69 বাইট
1##&@@(Prime[BitXor[PrimePi@#+1,1]-1]^#2&)@@@FactorInteger@#/._@_->1&
একটি নামবিহীন ফাংশন যা পূর্ণসংখ্যা গ্রহণ করে এবং প্রদান করে। এটি ইনপুটটিতে ত্রুটি ছুঁড়েছে 1
তবে এখনও সঠিক ফলাফলের গণনা করে।
ব্যাখ্যা
যথারীতি, সমস্ত সিনট্যাকটিক চিনির কারণে, পড়ার ক্রমটি কিছুটা মজার। একটি &
অধিকার সংজ্ঞায়িত একটি নামহীন ফাংশন এবং এর আর্গুমেন্টগুলি এর দ্বারা উল্লেখ করা হয় #
, #2
, #3
, ইত্যাদি
...FactorInteger@#...
আমরা ইনপুট ফ্যাক্টরিং দিয়ে শুরু করি। এটি জোড়গুলির একটি তালিকা দেয় {prime, exponent}
যেমন ইনপুট 12
দেয় {{2, 2}, {3, 1}}
। কিছুটা অসুবিধে হয়, 1
দেয় {{1, 1}}
।
(...&)@@@...
এটি স্তরের 1 স্তরের পূর্ণসংখ্যার তালিকার বামদিকে ফাংশনটি প্রয়োগ করে, এটি হ'ল প্রতিটি জোড়ের জন্য ফাংশনটি ডাকা হয়, প্রাইম এবং এক্সপোনেন্টকে পৃথক যুক্তি হিসাবে পাস করে, এবং তারপরে ফলাফলগুলির একটি তালিকা ফেরত দেয়। (এটি তালিকার উপরে ফাংশন ম্যাপিংয়ের অনুরূপ তবে দুটি জোড়া পাওয়ার চেয়ে দুটি পৃথক যুক্তি গ্রহণ করা আরও সুবিধাজনক))
...PrimePi@#...
আমরা অন্তর্নির্মিতটি ব্যবহার করে (প্রাইম) ইনপুট সহ প্রাইমগুলির সংখ্যা গণনা করি PrimePi
। এটি আমাদেরকে প্রাইমের সূচক দেয়।
...BitXor[...+1,1]-1...
ফলাফলটি বর্ধিত হয়, এর সাথে এক্সওআরড হয় 1
এবং আবার হ্রাস পায়। এই অদলবদল 1 <-> 2, 3 <-> 4, 5 <-> 6, ...
, অর্থাৎ সমস্ত 1-ভিত্তিক সূচকগুলি। নোট যে ইনপুট 1
সমর্পণ করা হবে 0
জন্য PrimePi
যা পরে ম্যাপ করা হয় -1
এই প্রক্রিয়ায়। আমরা পরে এটি মোকাবেলা করব।
...Prime[...]^#2...
আমরা এখন এন থাই প্রাইমটি পাই (যেখানে এনটি পূর্ববর্তী গণনা থেকে ফলাফল), যা সঠিকভাবে অদলবদলপ্রাইম, এবং ইনপুটটির অনুক্রমের ক্ষেত্রে এটি মূল প্রাইমের শক্তিতে উত্থাপন করে। এই মুহুর্তে Prime[-1]
একটি ত্রুটি ছুঁড়ে ফেলবে তবে নিজেই মূল্যহীন ফিরে আসবে। এই ক্ষেত্রে শক্তিটি 1
এত তাড়াতাড়ি পুরো প্রক্রিয়াটি {Prime[-1]}
ইনপুট 1
এবং অন্য সমস্ত ইনপুটগুলির জন্য সঠিক প্রধান শক্তির একটি তালিকা দেয়।
1##&@@...
এর পরে, আমরা কেবল সমস্ত মৌলিক শক্তিগুলিকে গুন করি। ফাংশনটির 1##&
জন্য একটি আদর্শ গল্ফিং ট্রিক Times
। দেখুন এই ডগা কিভাবে এটি কাজ করে জন্য (অধ্যায় "আর্গুমেন্ট ক্রমের সাথে")।
শেষ অবধি, আমাদের ইনপুটটির যত্ন নেওয়া দরকার 1
যার জন্য উপরের সমস্তটি ফলাফল করেছিল Prime[-1]
। একটি সহজ প্রতিস্থাপনের নিয়ম সহ আমরা এটি সহজেই ঠিক করতে পারি। মনে রাখবেন যে এর f@x
জন্য সংক্ষিপ্ত f[x]
। আমরা কেবলমাত্র সেই ফর্মের যে কোনও অভিব্যক্তির সাথে মিল রাখতে চাই (যেহেতু অন্য সমস্ত ফলাফলগুলি পূর্ণসংখ্যা হবে, অর্থাৎ পারমাণবিক এক্সপ্রেশন হবে) এবং এর সাথে এটি প্রতিস্থাপন করতে হবে 1
:
.../._@_->1
এখানে, /.
-এর সংক্ষিপ্ত রূপ ReplaceAll
, _@_
ফর্মের কিছু জন্য একটি প্যাটার্ন f[x]
(ক একক সন্তানের সঙ্গে অর্থাত কোনো যৌগ অভিব্যক্তি) এবং ->1
"সঙ্গে প্রতিস্থাপন বলেছেন 1
"।