یک مسئله و دو راه‌حل

برام سوال پیش اومده بود که چطور میشه برنامه‌ای نوشت که رقمی رو بگیره و چک کنه که رقم ورودی توانی از دو بوده یا نه؟ پاسخ نبایستی فقط به توان دو مقید باشه! از دوستان نظر خواستم که راه‌حل بدن. تا اینکه آقای علی نادر برای این سوال دو راه‌حل ارائه دادن. به نظرم اومد که راه‌حل دوم خیلی جالب باشه!

راه‌حل اول

اگر لگاریتم عدد ورودی در پایه دو عددی صحیح باشه، پس می‌تونیم نتیجه بگیریم که عدد ورودی توانی از دو هستش. اگر بخوایم چک کنیم که عددی که وارد میشه آیا توانی از سه هست یا نه، باید لگاریتم عدد در پایه سه رو محاسبه کنیم و ...
log1 2 = 0      # Entered number is 1
log2 2 = 1      # Entered number is 2
log8 2 = 3      # Entered number is 8
log10 2 = ?     # Entered number is 10

راه‌حل دوم

راه‌حل دوم خیلی ساده‌تر و جالب‌تره! برای فهمیدن اینکه عدد ورودی توانی از دو هست یا نه، باید دو رو به توان عدد ورودی برسونیم و بعد باقی‌مانده تقسیم اون رو بر عدد ورودی پیدا کنیم. اگر باقی‌مانده تقسیم صفر باشد، عدد ورودی توانی از دو است.
# Entered number is 10
(2 ^ 10) % 10 != 0

# Entered number is 4
(2 ^ 4) % 4 == 0
این راه‌حل خیلی جامع‌تر و بهتره به نظرم. مثلاً برای توان‌های سه تنها باید پایه در فرمول زیر به سه تغییر یابد.
(2 ^ x) % x     # x is entered number
اینم کد جاوای راه‌حل دوم
import java.util.Scanner;

public class Sample {
    static Scanner console = new Scanner(System.in);

    public static void main(String[] args) {
        int number = 0;

        System.out.print("Enter an integer number: ");
        number = console.nextInt();

        int sum = 1;
        for(int i = 1; i <= number; i ++)
            sum *= 2;

        if(sum % number == 0)
            System.out.print("True\n");
        else
            System.out.print("False\n");

    }
}
مرسیتم علی نادر !
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
طراح قالب : عرفـــ ـــان قدرت گرفته از بلاگ بیان