求100万内素数

    技术2025-01-15  22

    代码:

    #define SIZE 1000000 long prime[SIZE]; //保存求得的素数 prime[0] = 2; prime[1] = 3; long index = 2; int isPrime; for(long n = 4; n < SIZE; n++){ if(n%2 == 0 || n%3 == 0) continue; isPrime = 1; for(long i = 0; prime[i] <= sqrt(n) && i < index; i++){ //注意循环结束条件 if(n%prime[i] == 0){ //除数为数组prime内的元素,index为prime的上限 isPrime = 0; break; } } if(isPrime == 1){ prime[index] = n; index++; } } Tips:

    设置flag变量isPrime,若能被整除,则flag=0且循环结束;否则一直为1不变。整个循环完成后根据这个flag变量判断是否为素数判断整数n是否未素数时,其除数范围不是2~n-1的所有整数,而是2~sqrt(n)内的所有素数(考虑乘法交换律以及合数的定义,这两点很大地提高了效率)在进行1,2两条之前,先进行如下判断能筛掉大量的合数,提高效率

    if(n%2 == 0 || n%3 == 0) continue;
    最新回复(0)