vc的速度有c语言快吗,大家帮看看,怎么回事?Delphi竟比vc++还快

已结贴√

问题点数:20 回复次数:15

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

大家帮看看,怎么回事?Delphi竟比vc++还快

前天有一个求素数个数问题,用delphi7.0求得100000000以内素数用时21.234秒,为想更快一点,把代码变为C语言后用vc++6.0计算居然要27.578秒,故把代码贴出,大家帮忙查找原因?

Delphi7.0代码:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,math;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i, j, k, l,m,n,r:integer;

d,s:integer;

x,z,t,t1,t2: double;

a:array of integer;

ss:string;

begin

t1:=now;

ss:=trim(self.Edit1.Text );

if ss<>'' then n:=strtoint(ss) else n:=0;

setlength(a,n+1);

m:=0;s:=0;

if (n=2) then

begin

m:=1;a[m]:=2;s:=2;

end;

if (n=3) then

begin

m:=1;a[m]:=2;s:=2;

m:=2;a[m]:=3;s:=5;

end;

if (n>3)  then

begin

m:=1;a[m]:=2;s:=2;

m:=2;a[m]:=3;s:=5;

for i:=4 to n do

begin

x:=i;z:=sqrt(x);l:=trunc(z)+1;k:=0;

for  j:=1 to m  do

begin

if (a[j]>l) then break;

r:=i mod a[j];

if (r = 0) then

begin

inc(k);break;

end;

end;

if (k = 0) then

begin

inc(m);

s := s + i;

a[m]:=i;

end;

end;

end;

t2:=now;

t:=(t2-t1)*86400;

ss:=floattostr(t);

self.Label5.Caption  :=ss;

ss:=inttostr(m);

self.Label3.Caption  :=ss;

end;

end.

vc++6.0代码:

// suhucs.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

#include

#include

#include

#include

int main(int argc, char* argv[])

{

int i, j, k, l,m,n,r;

int d,s;

double x,z,t;

clock_t begin,end;

int *a;

printf("n=");

scanf("%d",&n);

printf("\n");

a=(int *)malloc((n+1)*sizeof(int))   ;

begin=clock();

m=0;s=0;

if(n==2)

{

m=1;a[m]=2;s=2;

}

if(n==3)

{

m=1;a[m]=2;s=2;

m=2;a[m]=3;s=5;

}

if(n>3)

{

m=1;a[m]=2;s=2;

m=2;a[m]=3;s=5;

for(i=4;i<=n;i++)

{

x=i;z=sqrt(x);l=(int)z+1;k=0;

for( j=1;j<= m;j++)

{

if(a[j]>l)break;

r=i%a[j];

if (r == 0) {

k++;break;

}

}

if (k == 0) {

m++;

s = s + i;

a[m]=i;

}

}

}

end=clock();

t=(double)(end-begin)/CLOCKS_PER_SEC;

printf("素数个数=%d\n",m);

printf("计算时间=%f",t);

free(a);

system("pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值