یک مسئله و دو راهحل
برام سوال پیش اومده بود که چطور میشه برنامهای نوشت که رقمی رو بگیره و چک کنه که رقم ورودی توانی از دو بوده یا نه؟
پاسخ نبایستی فقط به توان دو مقید باشه!
از دوستان نظر خواستم که راهحل بدن. تا اینکه آقای علی نادر برای این سوال دو راهحل ارائه دادن. به نظرم اومد که راهحل دوم خیلی جالب باشه!
راهحل اول
اگر لگاریتم عدد ورودی در پایه دو عددی صحیح باشه، پس میتونیم نتیجه بگیریم که عدد ورودی توانی از دو هستش. اگر بخوایم چک کنیم که عددی که وارد میشه آیا توانی از سه هست یا نه، باید لگاریتم عدد در پایه سه رو محاسبه کنیم و ...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");
}
}
مرسیتم علی نادر !