Amazon Interview Question
Software Engineer / DevelopersCountry: United States
Interview Type: Phone Interview
#include<stdio.h>
int main()
{
int i, n, flag;
int str[10];
printf("\nEnter the number\n");
scanf("%d", &n);
flag = 1; //----------------Assuming that the number is prime-----//
for(i = 2; i <= n/2; i++)
{
if(n % i == 0)
flag = 0;
}
if(0 == n || 1 == n || flag == 1)
printf("\n%d is a prime number\n", n);
else
printf("\n%d is a not prime number\n", n);
}
int str[10]; was written mistakenly... It is of no use in the program. But the program works fine for any input.
program works fine for any input.
really? I mean, REALLY? Your code is completely thrown off for large numbers and negative numbers.
PS: Take time, read the question and see if you need return something or SHOUT that you got output. And before claiming something big, be prepared to back it up!
Negative numbers are not prime numbers. Also, by adding just one "if sentence", i.e. if the entered number is less than zero, then it is not a prime number, can answer above question.
Regarding the large numbers, it is just a matter of computation that it may take extra time.
But the concept behind the code seems to be alright.
public static boolean isPrime(int num)
{
if(num<=0)
{
System.out.println("not a natural number");
return false;
}
if(num==1)
{return true;}
int limit=(int) Math.sqrt((double)num);
for(int i=2;i<limit;i++)
{
if(num%i==0)
{
return false;
}
}
return true;
}
All integers can be expressed as (6k + i) for some integer k and i = -1 0 1 2 3 4.
Integers of the form (6k + 0), (6k + 2) and (6k + 4) can be divided by 2. Integers that can be express as (6k + 3) can be divided by 3. Hence:
public boolean isPrime(int n) {
if (n <= 1)
return false;
if (n <= 3) {
return true;
}
if (n % 2 == 0) {
return false;
}
if (n % 3 == 0) {
return false;
}
int squareRootOfN = (int) Math.sqrt(n);
int x = 5;
while (x <= squareRootOfN) {
if (n % x == 0)
return false;
x+=2;
if (n % x == 0)
return false;
x+=4;
}
return true;
}
import java.lang.Math.*;
import java.io.*;
public class Prime
{
public static Boolean primeNumber(long x)
{
Boolean flag = true;
if(x<4)
{
if(x==1)
flag=false;
}
else
{
for(int i = 2; i<(int)Math.sqrt(x)+1;i++)
{
if(x%i==0)
{
flag=false;
}
}
}
return flag;
}
public static void main(String args[])
{
Boolean flag;
flag =primeNumber(Long.parseLong(args[0]));
System.out.println(flag);
}
}
1. If the number is less than 2 return false.
- Anonymous January 17, 20122. If the numbers is 2 return true.
3. let x = square_root_of (n)
4. for i = 3 to x
5. if ( x % number == 0) return false;
6. return true;
Why Square root? (step 3)
..... because for any non prime number, one of the factors is <= the square root.
Why less than 2? (step1)
......negative numbers and zero are not prime
......1 is not prime