已知a,b,c三数,求此x的最小值.(abcx均为正整数(DWORD)而且不大于$00FFFFFF)
公式: a*x mod b=c;由于偶比较苯,采用的是循环方式既
function fn(a,b,c:dword):dword;
var x:dword;
begin
for x:=0 to $00FFFFFF do begin
if (a*x mod b)=c then break;
end;
result:=x;
end;
但效率太低,哪位大虾有快速的方式请告知,谢谢
公式: a*x mod b=c;由于偶比较苯,采用的是循环方式既
function fn(a,b,c:dword):dword;
var x:dword;
begin
for x:=0 to $00FFFFFF do begin
if (a*x mod b)=c then break;
end;
result:=x;
end;
但效率太低,哪位大虾有快速的方式请告知,谢谢
解决方案 »
- 问个问题...如何让DBGRIDEH 某一列显示提示信息???
- 关于一种定义方式的疑问FABCDData: TABCDData = nil;
- Tserversocket问题?如果多个客户端同时向服务器端发送数据,用非阻塞型么?要自己写多线程么?
- 100分求教两个小问题
- 急!有人做过多线程串口通讯的程序么?
- 我是刚学Delphi的,遇到一个问题,请帮忙相告!
- 那里有Erwin的使用手册或是帮助之内的资料呀!
- 版本管理工具VSS哪里有下载
- 经过10小时仔细扫描,现在可以正常访问的中文DELPHI网站只有60个左右
- 关闭某一窗体时如何释放所有其他窗体?
- 有关数据不能刷新的问题
- 文件格式判断问题,会的请进来
如:
function fn(const a, b, c: DWord): DWord;
var
x: DWord;
begin
Result := $01000000; if (c > b - 1) or
((c <> 0) and (a mod b = 0)) then Exit; for x := 0 to $00FFFFFF do
if (a * x mod b) = c then
begin
Result := x;
Break;
end;
end;由公式:a * X mod b = c可以得知:
1. 0 <= c <= b-1
2. 当a mod b=0时,也就是说a为b的倍数,
那么当c<>0时,是没有结果的其它的情况我也没有总结,请楼主自行总结吧!
a:=$7B38; b:=$01F44F; c为变量
公式: a*x mod b=c;
数值范围 a<=$000FFFFF; b<=$00FFFFFF; c<=$0000FFFF; x<=$00FFFFFF;
其中a,b为一组固定数据( 如a:=$7B38; b:=$01F44F; ),且(a mod b)<>0.由于偶比较苯,采用的是循环方式既
function fn(a,b,c:dword):dword;
var x:dword;
begin
for x:=0 to $00FFFFFF do begin
if (int64(a*x) mod b)=c then break; //可能不需要加int64
end;
result:=x;
end;如 a:=$7B38; b:=$01F44F; c:=$4C1D; 则x:=$DE42;
需要循环$DE42次,而且有大量的数据需要处理,效率会很低,哪位大虾有快速方式来解决一下,谢谢