注册 登录
编程论坛 C++教室

- -愁死了.弄不明白..

寂寞日落 发布于 2013-07-11 14:27, 604 次点击
编写一个函数用来实现将一个数组指定的素数元素删除,主函数中定义10
个元素的一维数组,从键盘输入相应的数据,将数组。要删除的元素
。数组的大小(采用默认形参)作为实参传给函数,主函数中输出删
除之后的结果。

#include<iostream.h>
#include<math.h>
void main()
{   
    int a[10],i,flag,m,k=0,j;
    cout<<"请输入10个整数:";
    for(i=0;i<10;i++)
        cin>>a[i];   
    for(i=0;i<10;i++)   
        if(a[i]!=1)   
        {        
            flag=0;        
            m=(int)sqrt(a[i]);        
            for(j=2;j<=m;j++)        
                if(a[i]%j==0)        
                    flag=1;      
                if(flag)
        
                {        
                    cout<<a[i]<<" ";         
                }   
        }

}
一直不明白这段加红代码是怎样判断素数并且删除的..
5 回复
#2
寂寞日落2013-07-11 14:32
sqrt也可以判断素数吗?
#3
rjsp2013-07-11 14:45
你的代码是坨屎,现在来说素数
素数的定义:对于大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。

对于 n 而言,大于 根号n 的数肯定不能被 n 整数。
所以判断一个自然数是不是素数,只需要从2到其自身,整数看看有没有余数就行了
#4
love云彩2013-07-11 14:49
大哥,你这些代码是用来输出是素数的元素的,比如说你输入10,11,12,13,14,15,16,17,18,19,最后的输出结果是:11,13,17,19for(i=0;i<10;i++)   
        if(a[i]!=1)   
        {
        
             flag=0;        
             m=(int)sqrt(a[i]);        
             for(j=2;j<=m;j++)        
                 if(a[i]%j==0)        
                     flag=1;      
                if(flag)        
                 {        
                     cout<<a[i]<<" ";         
                 }   
        }

 这段标记红色的代码是用来判断10个元素是否为素数,如果是,就输出。
#5
love云彩2013-07-11 14:57
像3楼所说的:对于 n 而言,大于 根号n 的数肯定不能被 n 整数。
所以判断一个自然数是不是素数,只需要从2到其自身,整数看看有没有余数就行了
m=(int)sqrt(a[i])意思就是对a[i]进行开方,然后再取整,最后赋值给m。
for(j=2;j<=m;j++)  //这段代码就是按照判断素数的定义执行的,从2开始,一直循环到m,如果a[i]%j的余数为0,说明a[i]这个元素是素数,那么flag=1,最后就执行cout语句
if(a[i]%j==0)        
  flag=1;      
 if(flag)        
{  cout<<a[i]<<" ";}   

#6
寂寞日落2013-07-11 15:04
回复 5楼 love云彩
多谢...明白了..
1