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

有关素数的问题

wluhao 发布于 2012-10-11 13:25, 324 次点击
#include<iostream>
#include<cmath>
bool flag;
using namespace std;
int main()
{  int prime (int);
    int a;
  cout<<"input a:";
  cin>>a;
 
 
  if(flag=0)
      cout<<a<<"is not a prime"<<endl;
else
      cout<<a<<"is  a prime"<<endl;
  return 0;
}
int prime(int a)
{int i,m,flag=1;
m=sqrt(a);
for(i=2;i<=m;i++)
{if(a%i==0)
flag=0;
else  flag=1;}
return (flag);
}输入一个数求是否为素数,这个程序有什么错误
5 回复
#2
rjsp2012-10-11 14:04
随便帮你改了下
程序代码:
#include <iostream>
#include <cmath>
using namespace std;

bool prime( int n );

int main()
{

    int a;
    cout << "input a:";
    cin >> a;
    if( !cin )
        return 1;

    bool b = prime( a );
    if( !b )
        cout << a << " is not a prime" << endl;
    else
        cout << a << " is a prime" << endl;

    return 0;
}

bool prime( int n )
{
    if( n < 2 )
        return false;

    int m = (int)sqrt(n+0.0);
    for( int i=2; i<=m; ++i )
    {
        if( n%i==0 )
            return false;
    }
    return true;
}

#3
wluhao2012-10-11 16:41
回复 2楼 rjsp
多谢,能不能指出上述程序的错误,为啥编译后跟实际不符
#4
风之子MIKEY2012-10-11 20:36
#include<iostream>
#include<cmath>
bool flag;
using namespace std;
int main()
{  int prime (int);////////////这个申明应在main()上面
    int a;
  cout<<"input a:";
  cin>>a;

                /////////////  prime(int)未调用
  if(flag=0)   ///////////////if(flag==0)
      cout<<a<<"is not a prime"<<endl;
else
      cout<<a<<"is  a prime"<<endl;
  return 0;
}
int prime(int a)
{int i,m,flag=1;
m=sqrt(a);
for(i=2;i<=m;i++)
{if(a%i==0)
flag=0;
else  flag=1;}
return (flag);
}
////////////////////////////
/////////////////////////
更改后
#include<iostream>
#include<cmath>
using namespace std;
int prime (int);
int main()
{  int flag;
    int a;
  cout<<"input a:";
  cin>>a;

    flag=prime(a);      
  if(flag==0)  
    cout<<a<<"is not a prime"<<endl;
else
      cout<<a<<"is  a prime"<<endl;
  return 0;
}
int prime(int a)
{int i,m,flag=1;
m=sqrt(a);
for(i=2;i<=m;i++)
{if(a%i==0)
flag=0;
else  flag=1;}
return (flag);
}

#5
风之子MIKEY2012-10-11 20:48
不好意思还有个地方要改
int prime(int a)
{int i,m,flag=1;
m=sqrt(a);
for(i=2;i<=m;i++)
{if(a%i==0)
  return 0;////flag=0;
else  flag=1;}
return (flag);
}

#6
wluhao2012-10-12 11:28
回复 4楼 风之子MIKEY
多谢
1