# Count the nodes whose sum with X is a Fibonacci number

Given a tree, and the weights of all the nodes and an integer **X**, the task is to count all the nodes **i** such that **(weight[i] + X)** is a Fibonacci Number.

First few fibonacci numbers are:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 141, …

**Examples:**

Input:

X = 5

Output:2

Only the nodes 3 and 5 give a fibonacci number when 5 is added to them.

i.e. (3 + 5) = 8 and (16 + 5) = 21 are both Fibonacci numbers.

**Approach:** Perform dfs on the tree and count all the nodes sum of whose weight with **x** is a fibonacci number.

Below is the implementation of the above approach:

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `ans = 0, x; ` ` ` `vector<` `int` `> graph[100]; ` `vector<` `int` `> weight(100); ` ` ` `// Function that returns true if ` `// x is a perfect square ` `bool` `isPerfectSquare(` `long` `double` `x) ` `{ ` ` ` `// Find floating point value of ` ` ` `// square root of x ` ` ` `long` `double` `sr = ` `sqrt` `(x); ` ` ` ` ` `// If square root is an integer ` ` ` `return` `((sr - ` `floor` `(sr)) == 0); ` `} ` ` ` `// Function that returns true ` `// if n is a fibonacci number ` `bool` `isFibonacci(` `int` `n) ` `{ ` ` ` `return` `isPerfectSquare(5 * n * n + 4) ` ` ` `|| isPerfectSquare(5 * n * n - 4); ` `} ` ` ` `// Function to perform dfs ` `void` `dfs(` `int` `node, ` `int` `parent) ` `{ ` ` ` `// If weight of the current node ` ` ` `// gives a fibonacci number ` ` ` `// when x is added to it ` ` ` `if` `(isFibonacci(weight[node] + x)) ` ` ` `ans += 1; ` ` ` ` ` `for` `(` `int` `to : graph[node]) { ` ` ` `if` `(to == parent) ` ` ` `continue` `; ` ` ` `dfs(to, node); ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `x = 5; ` ` ` ` ` `// Weights of the node ` ` ` `weight[1] = 4; ` ` ` `weight[2] = 5; ` ` ` `weight[3] = 3; ` ` ` `weight[4] = 25; ` ` ` `weight[5] = 16; ` ` ` `weight[6] = 34; ` ` ` ` ` `// Edges of the tree ` ` ` `graph[1].push_back(2); ` ` ` `graph[2].push_back(3); ` ` ` `graph[2].push_back(4); ` ` ` `graph[1].push_back(5); ` ` ` `graph[5].push_back(6); ` ` ` ` ` `dfs(1, 1); ` ` ` ` ` `cout << ans; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

2

## Recommended Posts:

- Count of cells in a matrix which give a Fibonacci number when the count of adjacent cells is added
- Given a n-ary tree, count number of nodes which have more number of children than parents
- Count the number of non-reachable nodes
- Count the number of nodes at given level in a tree using BFS.
- Count the number of nodes at a given level in a tree using DFS
- Count all pairs of adjacent nodes whose XOR is an odd number
- Check if a M-th fibonacci number divides N-th fibonacci number
- Count the nodes of the tree which make a pangram when concatenated with the sub-tree nodes
- Print levels with odd number of nodes and even number of nodes
- Count Fibonacci numbers in given range in O(Log n) time and O(1) space
- Number of ways to represent a number as sum of k fibonacci numbers
- Finding number of digits in n'th Fibonacci number
- Count BST nodes that lie in a given range
- Nth Even Fibonacci Number
- Nth XOR Fibonacci number

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.