7 self.
arg = long(arg) % self.__class__.limit
8 assert(self.
arg >= 0
and self.
arg < self.__class__.limit)
11 return self.__class__.__name__ +
'(' + hex(self.
arg) +
')'
19 if cls.size > c2.size:
25 if isinstance(y, moduint):
26 return cmp(self.
arg, y.arg)
31 if isinstance(y, moduint):
33 return cls(self.
arg + y.arg)
35 return self.__class__(self.
arg + y)
38 if isinstance(y, moduint):
40 return cls(self.
arg & y.arg)
42 return self.__class__(self.
arg & y)
45 if isinstance(y, moduint):
47 return cls(self.
arg / y.arg)
49 return self.__class__(self.
arg / y)
58 return self.__class__(~self.
arg)
61 if isinstance(y, moduint):
63 return cls(self.
arg << y.arg)
65 return self.__class__(self.
arg << y)
68 if isinstance(y, moduint):
70 return cls(self.
arg % y.arg)
72 return self.__class__(self.
arg % y)
75 if isinstance(y, moduint):
77 return cls(self.
arg * y.arg)
79 return self.__class__(self.
arg * y)
82 return self.__class__(-self.
arg)
85 if isinstance(y, moduint):
87 return cls(self.
arg | y.arg)
89 return self.__class__(self.
arg | y)
98 if isinstance(y, moduint):
100 return cls(y.arg / self.
arg)
102 return self.__class__(y / self.
arg)
105 if isinstance(y, moduint):
107 return cls(y.arg << self.
arg)
109 return self.__class__(y << self.
arg)
112 if isinstance(y, moduint):
114 return cls(y.arg % self.
arg)
116 return self.__class__(y % self.
arg)
125 if isinstance(y, moduint):
127 return cls(y.arg >> self.
arg)
129 return self.__class__(y >> self.
arg)
132 if isinstance(y, moduint):
134 return cls(self.
arg >> y.arg)
136 return self.__class__(self.
arg >> y)
139 if isinstance(y, moduint):
141 return cls(y.arg - self.
arg)
143 return self.__class__(y - self.
arg)
149 if isinstance(y, moduint):
151 return cls(self.
arg - y.arg)
153 return self.__class__(self.
arg - y)
156 if isinstance(y, moduint):
158 return cls(self.
arg ^ y.arg)
160 return self.__class__(self.
arg ^ y)
172 return self.__class__(self.
arg ** v)
178 if isinstance(arg, moduint):
180 a = arg % self.__class__.limit
181 if a >= self.__class__.limit / 2:
182 a -= self.__class__.limit
184 assert(self.
arg >= -self.__class__.limit /
185 2
and self.
arg < self.__class__.limit)
189 return isinstance(a, moduint)
193 return (1 << size) - 1
203 "Define common int: ExprInt1, ExprInt2, .."
204 global mod_size2int, mod_int2size, mod_size2uint, mod_uint2size
206 common_int = xrange(1, 257)
210 c =
type(name, (moduint,), {
"size": i,
"limit": 1 << i})
217 c =
type(name, (modint,), {
"size": i,
"limit": 1 << i})