Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
long long mul( long long a, long long b, long long m ) {
long long q = (long long)((long double)a * (long double)b / (long double)m);
long long r = a * b - q * m;
return (r + 5 * m) % m;
}
#include <iostream>
using namespace std;
long long mul( long long a, long long b, long long m ) {
long long q = (long long)((long double)a * (long double)b / (long double)m);
long long r = a * b - q * m;
return (r + 5 * m) % m;
}
int main()
{
long long a = 1;
long long b = 1;
long long m = 0x7FFFFFFFFFFFFFFFLL;
cout << mul(a, b, m);
return 0;
}
long long rmul(long long a,long long b,long long m){
int s=0;
if(a>=m/2){ a=m-a; s=1; }
if(b>=m/2){ b=m-b; s^=1; }
long long q=(long long)((long double)a*(long double)b/(long double)m+0.5);
long long c=a*b-q*m;
if(c>=m || c<=(-1LL)<<62) c-=m;
else if(c<0) c+=m;
if(s && c!=0) c=m-c;
return c;
}
bool TestPrecision(long long a,long long b){
// test (a+b-b==a)
long long c=0;
__asm {
fild a
fild b
fadd
fild b
fsub
fistp c
}
if(c!=a) printf("Error: a=%I64x, b=%I64x, c=%I64x\n",a,b,c);
}
for(long long i=2;i<=sqrt(n);i++)
for(long long i=3;i<=sqrt(n); i+=2 )
Во-первых, sqrt тоже не как intrinsic описан.
_CRT_JIT_INTRINSIC double __cdecl sqrt(_In_ double _X);
/* jit64 instrinsic stuff */
#ifndef _CRT_JIT_INTRINSIC
#if defined(_M_CEE) && (defined(_M_AMD64) || defined(_M_IA64))
/* This is only needed when managed code is calling the native APIs, targeting the 64-bit runtime */
#define _CRT_JIT_INTRINSIC __declspec(jitintrinsic)
#else
#define _CRT_JIT_INTRINSIC
#endif
#endif
</code>
bool SimplicityTest(int number) {
if (number%2 == 0) { return false; }
int temp = 3;
do { if (number%temp == 0) { return false; }
temp=temp+2; }
while (temp<number);
return true; }
Не надо заниматься микрооптимизациями прежде, чем достигните нормальной асимптотики.
...if(b==1)
return a;
...
А почему не "return a%m;"? По-моему a*1 mod m = a mod m = a%m. Это ошибка автора или я что-то не так понял?
Выбран крайне неудачный ГПСЧ. Дело в том, что rand() возвращает число в диапазоне от 0 до RAND_MAX = 32767.
Алгоритм проверки на простоту за O (log N)