рдирдпрд╛ рд╕рд╛рд▓ рд╣реИрдмреНрд░-рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ -2016 (C ++)

рд╣рдо рд╕рднреА рдиреЗ рдХрд╣рд╛рд╡рдд рд╕реБрдиреА: рдирдпрд╛ рд╕рд╛рд▓ рдХреИрд╕реЗ рдордирд╛рдпрд╛ рдЬрд╛рдП - рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЦрд░реНрдЪ рдХрд░реЗрдВред рдУрд▓рд┐рд╡рд┐рдпрд░ рдПрдХ рддрд░рдл!

рдПрдХ рдЫреБрдЯреНрдЯреА рдкрд░ 5 рдШрдВрдЯреЗ рдХреА рдирд╛рд░рдХреАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЕрдорд╛рдирд╡реАрдп рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдорд╛рдирдХ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо (1 рд╕реЗ 2 30 ) рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдПрди рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ primes рдХрд╛ рдпреЛрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд┐рдЬреЗрддрд╛ рд╡рд╣ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЧрд▓рдд рдЙрддреНрддрд░ - рдФрд░ рдирд┐рд░реНрдгрдп рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рд╕рдорд╛рдзрд╛рди рдХреА рдЧрддрд┐ рдЕрдиреБрдореЗрдп рд╕реАрдорд╛ рдПрди (рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдХреБрд▓ 2 30 рдирд╣реАрдВ ) рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред

рд╡рд┐рдЬреЗрддрд╛ рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдорд╛рдиреНрдпрддрд╛, рд╕реИрдХрдбрд╝реЛрдВ рдХрд░реНрдо рдФрд░ рдПрдХ рд╕реБрдЦрдж рдПрд╣рд╕рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рд╣реИрдмреЗ рдкрд░ рд╕рднреА рдХреЛ рдердХрд╛рдпрд╛ред рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдпреБрд╡рд╛ рдкреАрдврд╝реА рдЗрд╕рдХреЗ рдХреЛрдб рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░реЗрдЧреА, рдФрд░ рд▓рдбрд╝рдХрд┐рдпрд╛рдВ рд╣рд╡рд╛ рдореЗрдВ рдмреЛрдирдЯ рдлреЗрдВрдХреЗрдВрдЧреАред рдХрдо рд╕реЗ рдХрдо рдкрд╣рд▓реЗ 4 рд░реАрдб-рдУрдирд▓реА рдпреВрдЬрд░реНрд╕ рдХреЛ рд╣реИрдмрд░ рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рддрд┐рдмрдВрдз:
  1. рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 1024 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░
    (рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдкреНрд░рддрд┐рднрд╛ рдХреА рдмрд╣рди рд╣реИ)
  2. рдХреНрд▓реИрдВрдЧ 3.2 рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ - рд╕реА ++, рдХреЗрд╡рд▓ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (+ pthreads)ред рдпрджрд┐ рдЖрдк C ++ 11 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдХреЗрд╡рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ libc ++ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред OpenMP / TBB рдХреЗ рд╕рд╛рде - рдпрд╣ рднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рд╛рде рд╡реЗ рдЕрднреА рднреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВред
    рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА C ++ рдЖрдкрдХреА рдореБрдЦреНрдп рднрд╛рд╖рд╛ рди рд╣реЛ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрддрд░ рдкрд░ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
  3. рдЯреЗрд╕реНрдЯ 64-рдмрд┐рдЯ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
    рдЖрдк 4 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ (i7-3820) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ 30 рдЬреАрдмреА рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдирд╣реАрдВред
  4. рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЗрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп 60 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ ред

рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛, рд╕рдордп рд╕реАрдорд╛ рдФрд░ рдХрд╣рд╛рдБ рднреЗрдЬрдирд╛ рд╣реИ
рдирд┐рд░реНрдгрдп 1 рдЬрдирд╡рд░реА, 2013 рдХреЛ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рдордп 14:59 рдмрдЬреЗ (рдорд╛рд╕реНрдХреЛ рд╕рдордп) рддрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХреЛ рдкрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЖрдкрдХреЛ рдкрддреНрд░ рдореЗрдВ рдХреЛрдб рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!

рд╕рдорд╛рдзрд╛рди рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХреА рдЯрд┐рдкреНрдкрдгреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
//@BarsMonster 
рдЬрд╣рд╛рдБ BarsMonster HabraHabr рдкрд░ рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╣реИ (рдХреЗрд╡рд▓-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

рдкрд░рд┐рдгрд╛рдо рдФрд░ рдирд┐рд░реНрдгрдп Habr├й рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ - рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ 2 рдЬрдирд╡рд░реА рд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВред

рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: (рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рд╣реИ, 242 рдмрд╛рдЗрдЯреНрд╕)
 //@BarsMonster #include<iostream> using namespace std; int main() { __int64_t n, sum=0; cin>>n; for(__int64_t i=2;i<=n;i++) { for(__int64_t j=2;j<i;j++) if(i%j==0)goto next; sum+=i; next:; } cout << sum << endl; } 

рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг:
 test@lbox2:~$ ./a.out 10 17 test@lbox2:~$ time ./a.out 100000 454396537 real 0m7.073s user 0m4.693s sys 0m0.000s 


рдЕрдкрдбреЗрдЯ: рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ 22 рдорд┐рдирдЯ рдмрд╛рдж - рдФрд░ рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╣реА рдЖ рдЪреБрдХрд╛ рд╣реИ :-)
рдЕрдкрдбреЗрдЯ: рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ 3 рдШрдВрдЯреЗ рдмрд╛рдж - 10 рдирд┐рд░реНрдгрдпред
рдЕрдкрдбреЗрдЯ: рдирд╛рдЯрдХ рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВред
рдЕрдкрдбреЗрдЯ: рд╡рд┐рдЬрд╝реБрдЕрд▓рд╕реНрдЯрдбрд┐рдпреЛ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП - рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрдХрд▓рди рдХреА рдЬрд╛рдБрдЪ рдпрд╣рд╛рдБ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ: llvm.org/demo (C ++ рдХреЛ рдЪреБрдирдирд╛ рди рднреВрд▓реЗрдВ)
рдЕрдкрдбреЗрдЯ: рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдВрдд рд╕реЗ 3 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ - рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 160 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИ рд╣реИред
рдЕрдкрдбреЗрдЯ: рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдВрдд рд╕реЗ 1 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ - 200 рдирд┐рд░реНрдгрдпред
рдЕрджреНрдпрддрди: рдЕрдВрдд рддрдХ 7 рдорд┐рдирдЯ - 3-5 рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдЖрддреЗ рд╣реИрдВ
рдЕрдкрдбреЗрдЯ: рдлреИрд╕рд▓реЛрдВ рдХрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, 265 рдлреИрд╕рд▓реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рд╣реИрдВ (рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд╕рд╛рде)ред рдкрд░рд┐рдгрд╛рдо рддрд╛рд▓рд┐рдХрд╛, рд╡рд┐рдЬреЗрддрд╛ рд╕реНрд░реЛрдд рдХреЛрдб, рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг - рд╕рдм рдХреБрдЫ 2 рдЬрдирд╡рд░реА рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдореИрдВ рд╕рдордп рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ) рдПрдХ рд╣реА рдЖрд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВред
рдЕрджреНрдпрддрди: 183 рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ред
рдЕрджреНрдпрддрди: 42 рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ main.cpp рдлрд╝рд╛рдЗрд▓ рднреЗрдЬреА
рдЕрджреНрдпрддрди: 162 рд╕рдорд╛рдзрд╛рдиреЛрдВ рдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдореБрдЭреЗ рдмрд╣реБрдд рдмреБрд░рд╛ рд▓рдЧрд╛ред
рдЕрдкрдбреЗрдЯ: 164 рд╕рдорд╛рдзрд╛рди рд╕рдВрдХрд▓рд┐рдд, 1 C ++ 11 рдХрд╛ рд╢рд┐рдХрд╛рд░ рд╣реБрдЖ, 18 рдЕрдзрд┐рдХ рдЕрднрд┐рдпреБрдХреНрдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╢рд┐рдХрд╛рд░ рд╣реБрдЖред
рдЕрдкрдбреЗрдЯ: рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг (1, 10, 1000, 100000, 1,000,000) рдореЗрдВ 109 рд╕рдорд╛рдзрд╛рди рдЙрддреНрддреАрд░реНрдг рд╣реБрдП, 47 рдиреЗ рдЧрд▓рдд рдЙрддреНрддрд░ рджрд┐рдП (рдХреНрд░реИрд╢ рд╕рд╣рд┐рдд), 8 рдиреЗ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛ (рд▓реЗрдЦ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг 1 рдорд┐рд▓рд┐рдпрди рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдореЗрдВ 5 рд╕реЗ 36 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ )ред
рдЕрджреНрдпрддрди: рдЬрдЯрд┐рд▓ рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, 91 рд╕рдорд╛рдзрд╛рдиреЛрдВ рдиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдкрд░ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, 5 - рдЧрд▓рдд рдЙрддреНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде, 13 - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдПред рд╕рдорд╛рдзрд╛рди рд╕рдордп рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдорд╛рдкрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдФрд╕рдд 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдкрд░рд┐рдгрд╛рдо рддрд╛рд▓рд┐рдХрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред
рдЕрджреНрдпрддрди: рд╢реАрд░реНрд╖ -3 рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ 100 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕рдордп рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) - рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдмрджрд▓рд╛ред

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


All Articles