рдУ (рд▓реЙрдЧ рдПрди) рдХреЗ рд▓рд┐рдП рд╕рд╛рджрдЧреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рд╕рд╛рджрдЧреА рдХреА рдкрд░реАрдХреНрд╖рд╛


рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рджреА рдЧрдИ рд╕рдВрдЦреНрдпрд╛ N рд╕рд░рд▓ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ N рдХреЗ рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЦреЛрдЬ рдЪрдХреНрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

bool prime(long long n){ for(long long i=2;i<=sqrt(n);i++) if(n%i==0) return false; return true; } 


рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдПрдХ рдирдВрдмрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдХрд╛рд░реНрдп рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реИ - рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╡рд┐рд╖рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдУ (sqrt (N)) рд╣реИ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдЦреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЖрдкрдХреЛ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХреЛ рддреЗрдЬреА рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдЪреЗрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ Sieve of Eratosthenes рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХрд▓ рд╕рд╛рджрдЧреА рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ - рддреНрд╡рдЪрд╛ рдкрд░реАрдХреНрд╖рдг ред

рдлрд╝рд░реНрдореЗрдЯ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдУ (рд▓реЙрдЧ рдПрди) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡реНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рдлрд╝рд░реНрдореЗрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рддреАрдп рддрд░реНрдХ рдХрд╛рдлреА рд╣рдж рддрдХ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ ред

рдореИрдВ C ++ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░реВрдВрдЧрд╛, рдФрд░ рдпрд╣ рднреА рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рдкрд╛рд╡рд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╕рдордп рд▓рдВрдмреЗ рд▓рдВрдмреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред

рдлрд╛рд░реНрдо рдЯреЗрд╕реНрдЯ

рддреНрд░реБрдЯрд┐ рдХреА рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдПрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд░реНрдореЗрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдП 100 рдмрд╛рд░ рдЬрд╛рдВрдЪрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
рдЫрд╡рд┐

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдП рдФрд░ рдПрди рдХреЛ рдХреЙрдкреАрдЯрд╛рдЗрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдВрдЦреНрдпрд╛ рдПрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред

 bool ferma(long long x){ if(x == 2) return true; srand(time(NULL)); for(int i=0;i<100;i++){ long long a = (rand() % (x - 2)) + 2; if (gcd(a, x) != 1) return false; if( pows(a, x-1, x) != 1) return false; } return true; } 


рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди GCD рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рдкрд╛рд╡рд░ рдореЛрдбреБрд▓реЛ рдХреЛ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рдЬреАрд╕реАрдбреА рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ

рджрд░рдЕрд╕рд▓, GCD рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред рд╣рдо рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :

 long long gcd(long long a, long long b){ if(b==0) return a; return gcd(b, a%b); } 


рддреЗрдЬреА рд╕реЗ рдШрд╛рддрд╛рдВрдХ рдореЛрдбреБрд▓реЛ

рддреЗрдЬреА рд╕реЗ рдШрд╛рддрд╛рдВрдХ (рдмрд╛рдЗрдирд░реА) рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдПрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рддрдм рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдкрд░рд┐рдгрд╛рдо рдореЛрдбреНрдпреВрд▓ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рджреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рдмрд╛рдЗрдирд░реА рдЧреБрдгрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдШрд╛рддрд╛рдВрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред

 long long mul(long long a, long long b, long long m){ if(b==1) return a; if(b%2==0){ long long t = mul(a, b/2, m); return (2 * t) % m; } return (mul(a, b-1, m) + a) % m; } long long pows(long long a, long long b, long long m){ if(b==0) return 1; if(b%2==0){ long long t = pows(a, b/2, m); return mul(t , t, m) % m; } return ( mul(pows(a, b-1, m) , a, m)) % m; } 


рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐рд╕реА рдкрд╛рд╡рд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╕рдордп, рдЕрдЧрд░ рджреВрд╕рд░рд╛ рдлреИрдХреНрдЯрд░ рднреА рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ 2 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдП рдФрд░ рдмреА / 2 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдП рдФрд░ рдмреА - 1 рдХреЗ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди рдХреЗ рдПрд╕рд┐рдореНрдкреЛрдЯрд┐рдХреНрд╕

рд╕рд╛рджрдЧреА рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢реЛрдиреНрдореБрдЦрддрд╛ рд╣реЗ (K * log N * log N) рд╣реИ , рдЬрд╣рд╛рдВ K Fermat рдкрд░реАрдХреНрд╖рдг рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ 100 рд╣реИред рдпрджрд┐ рдЖрдк рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╛рдЗрдирд░реА рдЧреБрдгрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕рд╛рджрдЧреА рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдПрд╕рд┐рдореНрдкреЛрдЯрд┐рдХреНрд╕ рдУ (рдХреЗ * рд▓реЙрдЧ рдПрди) рд╣реЛрдВрдЧреЗ ред

Source: https://habr.com/ru/post/In205318/


All Articles