100亿c语言,【C代码】100秒找出100亿最大的素数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

//Code

#include

#include

#include

#include

#pragma warning(disable:4996)

#pragma warning(disable:4244)

int main()

{

printf("Concise Prime - Complete Division - Generate\n");

unsigned int m_size, ctr_size, x, y, mid_limit, end_limit, pmax, pnumber, pctr;

unsigned int *pm;

unsigned int prime_bd, b16, m32, m128, m256, m512, g1, g2, g4;

time_t time_start, time_stop;

FILE *fid_data;

printf("Value...\n");

b16 = 0xFFFF;

m32 = 0x1FFFFFF;

m128 = 0x7FFFFFF;

m256 = 0xFFFFFFF;

m512 = 0x1FFFFFFF;

g1 = 0x3FFFFFFF;

g2 = 0x7FFFFFFF;

g4 = 0xFFFFFFFF;

prime_bd = g4;

mid_limit = sqrt(prime_bd) + 1;

m_size = prime_bd / 8 + 1;

pctr = 0;

printf("Allocate %u ...\n", m_size);

pm = (unsigned int *)malloc(m_size);

printf("Initialize...\n");

ctr_size = m_size / 4 - 1;

*pm = 0x3FFFFFFF;

for (x = 1; x <= ctr_size; x++) *(pm + x) = 0xFFFFFFFF;

printf("Compute...\n");

time(&time_start);

for (x = 0; x

{

if ((*(pm + x / 32) << x % 32) & 0x80000000)

{

if (x

{

end_limit = (prime_bd / x)*x;

*(pm + end_limit / 32) &= ~(0x80000000 >> end_limit % 32);

for (y = x + x; y> y % 32);

}

else break;

}

}

time(&time_stop);

printf("Write File...\n");

fid_data = fopen("PRIME.dat", "wb");

fwrite(pm, 4, m_size / 4, fid_data);

fclose(fid_data);

printf("Get MAX and AMOUNT...\n");

for (x = ctr_size; x>0; x--)

{

if (*(pm + x)>0)

{

for (y = 0; y<32; y++)

{

if ((*(pm + x) >> y) & 0x00000001) break;

}

break;

}

}

pmax = 32 * x + (31 - y);

pnumber = 0;

for (x = ctr_size; x>0; x--)

{

if (*(pm + x)>0)

{

for (y = 0; y<32; y++)

{

if ((*(pm + x) >> y) & 0x00000001) pnumber++;

}

}

}

for (y = 0; y<32; y++)

{

if ((*pm >> y) & 0x00000001) pnumber++;

}

printf("Max: %u\n", pmax);

printf("Amount: %u\n", pnumber);

printf("Time of Computation: %u s\n", (unsigned int)difftime(time_stop, time_start));

printf("Finished\n");

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值