Hi all ,
i was solving one puzzle using JAVA , I have figured the solution , expected result is also coming but as My program is not up to the standard i am loosing points . Can anyone please help me figure it out what is not correct in my program . Thanks in advance .
Problem Description :- There is one friendly number and N unfriendly numbers. We want to find how many numbers are there which exactly divide the friendly number, but does not divide any of the unfriendly numbers.
Input Format:
The first line of input contains two numbers N and K seperated by spaces. N is the number of unfriendly numbers, K is the friendly number.
The second line of input contains N space separated unfriendly numbers.
Output Format:
Output the answer in a single line.
Constraints:
1 <= N <= 10^6
1 <= K <= 10^13
1 <= unfriendly numbers <= 10^18
Sample Input:
8 16
2 5 7 4 3 8 3 18
Sample Output:
1
Explanation :
Divisors of the given friendly number 16, are { 1, 2, 4, 8, 16 } and the unfriendly numbers are {2, 5, 7, 4, 3, 8, 3, 18}. Now 1 divides all unfriendly numbers, 2 divide 2, 4 divide 4, 8 divide 8 but 16 divides none of them. So only one number exists which divide the friendly number but does not divide any of the unfriendly numbers. So the answer is 1.
My Solution :- :-
PHP Code:
import java.util.Scanner;
import java.util.Vector;
public class Solution {
String[] input;
Vector friendlyDivisor = new Vector();
int[] unfriendlyNumbers;
int noOfUnfriendlyNo;
int friendlyNumber ;
public static void main(String[] args) {
Solution classIns = new Solution();
classIns.input = new String[2];
Scanner scan = new Scanner(System.in);
String getInput = scan.nextLine();
String[] tempArr = getInput.split(" ");
if(tempArr.length > 2){
System.exit(1);
}
if(classIns.validateInput(tempArr[0])){
int temp1 = Integer.parseInt(tempArr[0]);
if(classIns.validateInput(temp1,"unfriendlyNumber")){
classIns.noOfUnfriendlyNo = temp1;
}
else{
System.exit(1);
}
}
else{
System.exit(1);
}
if(classIns.validateInput(tempArr[1])){
int temp2 = Integer.parseInt(tempArr[1]);
if(classIns.validateInput(temp2,"unfriendlyNumber")){
classIns.friendlyNumber = temp2;
classIns.input[0] = getInput;
}
else{
System.exit(1);
}
}
else{
System.exit(1);
}
//System.out.println("Enter next line");
String str = scan.nextLine();
classIns.input[1] = str;
String[] tempArr2 = str.split(" ");
classIns.unfriendlyNumbers = new int[classIns.noOfUnfriendlyNo];
if(classIns.unfriendlyNumbers.length != tempArr2.length){
System.exit(1);
}
for(int count=0 ;count<tempArr2.length;count++){
String str2 = tempArr2[count];
if(classIns.validateInput(str2)){
int temp3 = Integer.parseInt(str2);
if(classIns.validateInput(temp3,"unfriendlyNumberList")){
classIns.unfriendlyNumbers[count] = temp3;
}
else{
System.exit(1);
}
}
else{
System.exit(1);
}
}
int result = classIns.calculateSulution();
System.out.println(result);
}
public boolean validateInput(int num,String str){
if(str.equalsIgnoreCase("friendlyNumber")){
if(! ((num >= 1) &&(num<= Math.pow(10.0, 13.0))) ){
return false;
}
}
else if(str.equalsIgnoreCase("unfriendlyNumber")){
if(! ((num >= 1) &&(num<= Math.pow(10.0, 6.0))) ){
return false;
}
}
else if(str.equalsIgnoreCase("unfriendlyNumberList")){
if(! ((num >= 1) &&(num<= Math.pow(10.0, 18.0))) ){
return false;
}
}
return true;
}
public int calculateSulution(){
int count = 0;
this.findDivisorForFriendlyNumbers();
//for(int i = 0;i<this.friendlyDivisor.length;i++){
for(Object o : this.friendlyDivisor){
int temp1 = (Integer)o;
boolean test = true;
for(int j = 0;j<this.unfriendlyNumbers.length;j++){
int temp2 = this.unfriendlyNumbers[j];
if(temp2%temp1==0){
test = false;
break;
}
if((j == (this.unfriendlyNumbers.length - 1)) && test){
count++;
}
}
}
return count;
}
public void findDivisorForFriendlyNumbers(){
int countDiv= 0;
//Vector vect = new Vector();
for(int count=1;count<=this.friendlyNumber;count++){
if(this.friendlyNumber%count==0){
countDiv++;
this.friendlyDivisor.add(count);
}
}
}
public boolean validateInput(String val){
boolean result = true ;
try {
Integer.parseInt(val);
} catch (NumberFormatException ex) {
return false;
}
return true;
}
}