软件注册站
热情软件屋

 
如何选出质数
编号: QA002494    
建立日期: 2000年1月27日 最后修改日期: 2005年8月20日
所属类别: C/C++ - 其他方面
   
    编程工具: VC++ 6.0
    操作系统: win98
    问题:我要把任意一个整数分解成其质因子的乘积。我想到的算法是顺次用质子去除它,直到剩下的数等于1。所以我想先把所有质数存在一个数组里,再逐个调用。问题是如何选出质数并把它顺次存入数组。哪位大侠指点一下。程序是用VC做,输入的整数是long型。谢谢。(dodowolf)
   
    你的问题的关键是判断一个数是否是质数。因为任何一个自然数都不可能被比它大的自然数整除,所以要判断一个自然数是否为质数,只要看它能否被比它小的自然数(当然除1之外)整除,若只要存在能被一个自然数整除则就不是质数,否则是质数。另一方面,若一个自然数n不是质数,则必然能表示成两个自然数n1和n2之积,并且其中之一必然小于等于sqrt(n),另一个必然大于等于qrt(n)。所以要判断一个自然数n是否为素数,可简化为判断它能否被2至sqrt(n)之间的自然数整除即可。求质数的例子:
     #include<math.h>
    
void main()
    
{
    
int i,n;
    
printf("%d ", 2); //素数2单独输出
    
for(n=3; n<=99; n+=2) {
    
int temp=int(sqrt(n));
    
for(i=2; i<=temp; i++)
    
if(n %i == 0) break; //执行break时为非正常结束循环
    
if(i>temp) printf("%d ", n); //输出一个素数
    
}
    
printf("\n");
    
}
    

    
    张扬的意见:
    用c语言编一个函数
    isprime(n){
    
int a,b,flag=1;
    
for(a=1;a<=sqrt(n);a++)
    
if (n%a==0) {flag=0; break;};
    
return flag;} //当flag为0,不是质数,为1为质数,作为判断
    

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio