key.append(1)# prevent initial state from being {0}^17
taps=[16-0,16-14]
lfsr17=lfsr(key,taps)
states=[lfsr17.state]
for_inrange(2**17-2):
lfsr17.shift()
states.append(lfsr17.state)
sorted_states=sorted(states,key=lambdax:tuple(x))
foriinrange(2**17-2):
ifsorted_states[i]==sorted_states[i+1]:# compare each state with the next state in the sorted list, if 2 states are identical they should be next to each other
print(f'state {sorted_states[i]} appears at least 2 times')
returnFalse
n_state=len(sorted_states)
n_state_log=log2(n_state+1)
print(f'all {n_state} = 2^({n_state_log})-1 states are different')