您的位置:首页 > 其它

质数及求因子和

2010-10-26 20:38 155 查看
(1) 枚举

sum=0;

for(int i=1; i<=n; i++)

if(n%i == 0) sum+=i;

(2)n的因子成对出

sum=0;

for(int i=1; i*i<n; i++)

if(n%i == 0) sum+=(i + n/i);

if(i*i == n) sum+=i;

(3)产生质数表

bool isPrime[MAXN];

int prime();

memset(isPrime,true,sizeof(isPrime));

tot = 0;

prime[tot++]=2;

for(i=3;i<MAXN;i+=2) //i+=2

if(isPrime[i]){

prime[tot++]=i;

for(j=i+i;j<MAXN;j+=i) isPrime[j]=false;

}

(4)改进的线性法

memset(isPrime ,true,sizeof(isPrime));

for(i=2; i<=n; i++){

if(isPrime[i]) prime[tot++]=i;

for(j=0;j<tot && i*prime[j]<=n;j++){

isPrime[i*prime[j]] = false;

if(i%prime[j]==0)break;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: