<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1970_-_secventa_xor</id>
	<title>1970 - secventa xor - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1970_-_secventa_xor"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1970_-_secventa_xor&amp;action=history"/>
	<updated>2026-05-01T06:49:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1970_-_secventa_xor&amp;diff=9765&amp;oldid=prev</id>
		<title>Cristina94: Pagină nouă: ==Enunţ== Fie secvența S(x) care se construiește astfel:  S(1)=x S(n+1)=S(n) XOR [S(n)/2], unde [x] se definește ca parte întreagă din x, iar XOR este operația clasică „sau exclusiv”.  ==Cerința== Dându-se un număr natural k, aflați numărul de numere naturale x pentru care S(k+1)=S(1)=x este adevărat. Deoarece numărul poate fi foarte mare, afișați rezultatul modulo 1000000007.  ==Date de intrare== Fișierul de intrare secventa.in se găsește un singur nu...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1970_-_secventa_xor&amp;diff=9765&amp;oldid=prev"/>
		<updated>2024-04-01T14:10:56Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==Enunţ== Fie secvența S(x) care se construiește astfel:  S(1)=x S(n+1)=S(n) XOR [S(n)/2], unde [x] se definește ca parte întreagă din x, iar XOR este operația clasică „sau exclusiv”.  ==Cerința== Dându-se un număr natural k, aflați numărul de numere naturale x pentru care S(k+1)=S(1)=x este adevărat. Deoarece numărul poate fi foarte mare, afișați rezultatul modulo 1000000007.  ==Date de intrare== Fișierul de intrare secventa.in se găsește un singur nu...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Enunţ==&lt;br /&gt;
Fie secvența S(x) care se construiește astfel:&lt;br /&gt;
&lt;br /&gt;
S(1)=x&lt;br /&gt;
S(n+1)=S(n) XOR [S(n)/2], unde [x] se definește ca parte întreagă din x, iar XOR este operația clasică „sau exclusiv”.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Dându-se un număr natural k, aflați numărul de numere naturale x pentru care S(k+1)=S(1)=x este adevărat. Deoarece numărul poate fi foarte mare, afișați rezultatul modulo 1000000007.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare secventa.in se găsește un singur număr natural k.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire secventa.out va conține pe prima linie un singur număr – răspunsul problemei modulo 1000000007.&lt;br /&gt;
&lt;br /&gt;
Dacă pentru un număr k există o infinitate de numere x care respectă cerința, se va afișa numărul -1.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ k ≤ 10^19&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;secventa.in&lt;br /&gt;
:260&lt;br /&gt;
&lt;br /&gt;
;secventa.out&lt;br /&gt;
:15&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;secventa.in&lt;br /&gt;
:100000000000000000000&lt;br /&gt;
&lt;br /&gt;
;secventa.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1970 secventa xor&lt;br /&gt;
MOD = 1000000007&lt;br /&gt;
&lt;br /&gt;
def calculate_sequence_term(k, x):&lt;br /&gt;
  while k &amp;gt; 0:&lt;br /&gt;
    x = x ^ (x // 2)&lt;br /&gt;
    k -= 1&lt;br /&gt;
  return x&lt;br /&gt;
&lt;br /&gt;
def count_matching_numbers(k):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for x in range(1, k + 1):&lt;br /&gt;
    if calculate_sequence_term(k, x) == x:&lt;br /&gt;
      count += 1&lt;br /&gt;
  return count % MOD&lt;br /&gt;
&lt;br /&gt;
def verify_input_data(k):&lt;br /&gt;
  if not (1 &amp;lt;= k &amp;lt;= 10 ** 19):&lt;br /&gt;
    with open(&amp;quot;secventa.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;secventa.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    k = int(fin.readline().strip())&lt;br /&gt;
&lt;br /&gt;
  if not verify_input_data(k):&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  matching_numbers = count_matching_numbers(k)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;secventa.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(matching_numbers))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
</feed>