import
java.util.*;
class
Node {
int
val;
Node next;
public
Node(
int
val, Node next)
{
this
.val = val;
this
.next = next;
}
}
public
class
SubsequenceWithPerfectSquareSum {
public
static
boolean
isPrime(
int
num)
{
if
(num <=
1
)
return
false
;
for
(
int
i =
2
; i <= Math.sqrt(num); i++) {
if
(num % i ==
0
)
return
false
;
}
return
true
;
}
public
static
boolean
hasSubsequenceWithSumAsPerfectSquare(Node head)
{
Map<Integer, Node> sumToNode =
new
HashMap<>();
int
sum =
0
;
sumToNode.put(sum,
null
);
int
index =
0
;
while
(head !=
null
) {
if
(isPrime(head.val)) {
sum += head.val;
if
(Math.sqrt(sum) == (
int
)Math.sqrt(sum)) {
return
true
;
}
if
(sumToNode.containsKey(
sum - (
int
)Math.sqrt(sum))) {
Node temp = sumToNode.get(
sum - (
int
)Math.sqrt(sum));
if
(temp !=
null
&& temp.next !=
null
&& temp.next.next == head) {
return
true
;
}
}
sumToNode.put(sum, head);
}
head = head.next;
index++;
}
return
false
;
}
public
static
void
main(String[] args)
{
Node head =
new
Node(
13
,
null
);
head.next =
new
Node(
5
,
null
);
head.next.next =
new
Node(
10
,
null
);
head.next.next.next =
new
Node(
7
,
null
);
head.next.next.next.next =
new
Node(
2
,
null
);
boolean
hasSubsequence
= hasSubsequenceWithSumAsPerfectSquare(head);
if
(hasSubsequence) {
System.out.println(
"Yes"
);
}
else
{
System.out.println(
"No"
);
}
}
}