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

判断是否为素数哪里出问题了

suchengjie 发布于 2013-07-31 17:47, 1990 次点击
程序代码:
#include<iostream>
#include<math.h>
using namespace std;

 void main()
{int sushu(int x)
    {
        while(x>1)
        {
            for(int i=2;i<=sqrt(x);i++)
                if(x%i==0)
                    return 0;
                else
                    return 1;
        }
        if(x<=1)
            return 0;
    }
    int sushu(int x);
    int a;
    cout<<"please input a number a:"<<endl;
    cin>>a;
    switch(sushu(a))
    {
    case 1:cout<<a<<"is sushu!"<<endl;
    case 0:cout<<a<<"is not sushu!"<<endl;
    }
}
37 回复
#2
peach54602013-07-31 17:49
什么叫出问题了,哪里出问题了,是编不过还是运行挂了,还是结果不对?
#3
suchengjie2013-07-31 19:50
错误为:error C2601: 'sushu' : local function definitions are illegal
#4
peach54602013-07-31 21:01
你这段代码有好几个问题...
1,谁教你吧函数定义在main里面的

剩下的,等你把函数写对了再告诉你
#5
suchengjie2013-07-31 21:10
对哦,不能把函数放在main里
#6
suchengjie2013-07-31 21:14
程序代码:
#include<iostream>
#include<math.h>
using namespace std;

 void main()
{    int sushu(int x);
    int a;
    cout<<"please input a number a:"<<endl;
    cin>>a;
    switch(sushu(a))
    {
    case 1:cout<<a<<"is sushu!"<<endl;
        break;
    case 0:cout<<a<<"is not sushu!"<<endl;
        break;
    }
}

 


 int sushu(int x)
    {
        while(x>1)
        {
            for(int i=2;i<=sqrt(x);i++)
                if(x%i==0)
                    return 0;
                else
                    return 1;
        }
        if(x<=1)
            return 0;
    }


这样应该没问题了吧
#7
纯黑色2013-07-31 21:23
回复 6楼 suchengjie
你应该在main函数之前声明你要调用的函数= =
#8
suchengjie2013-07-31 21:27
在后面应该也没问题吧
#9
纯黑色2013-07-31 21:30
回复 8楼 suchengjie
你可以试试能不能编译通过,要勤动手写  呵呵.
#10
peach54602013-08-01 06:54
回复 6楼 suchengjie
且不说逻辑问题...你试过能编译过没?
#11
wp2319572013-08-01 07:36
0分贴啊  

关于素数问题 只要你去搜  无论啥代码  估计都要用筐背
#12
suchengjie2013-08-01 09:26
可以编译过了
#13
suchengjie2013-08-01 09:28
回复 10楼 peach5460
可以编译了呀!哪里还有问题呢
#14
peach54602013-08-01 09:33
回复 13楼 suchengjie
结果对吗?
#15
suchengjie2013-08-01 09:43
回复 14楼 peach5460
貌似有点问题,输入9的时候显示9是素数,哪里有问题呢
#16
peach54602013-08-01 09:47
自己跑代码试试...啊,不要等着我来跟你指出问题,先自己找找看...
#17
suchengjie2013-08-01 09:49
只要是奇数都显示为素数
#18
suchengjie2013-08-01 10:07
程序代码:
int sushu(int x)
    {
        while(x>1)
        {
            for(int i=2;i<sqrt(x);i++)
                if(x%i==0)
                    break;
                if(i*i>sqrt(x))
                    return 1;
                else
                    return 0;
        }
        if(x<=1)
            return 0;
    }
主函数为这样应该对了吧!
#19
peach54602013-08-01 10:26
回复 18楼 suchengjie
对不对又不是由我口说的,看结果啊...
#20
suchengjie2013-08-01 10:37
嗯,我感觉没问题了
#21
wp2319572013-08-01 10:52
打印1--100之间所有素数  没你弄那么复杂吧
程序代码:
#include<iostream>

using namespace std;

int sushu(int x)
{
    if(x<=1) return 0;
    if(x>1)    for(int i=2;i<x;i++) if(x%i==0) return 0;
    return 1;
}
int main()
{
    for(int a=1;a<100;a++)
        if(sushu(a)==1) cout<<a<<endl;
    return 0;
}



[ 本帖最后由 wp231957 于 2013-8-1 10:56 编辑 ]
#22
peach54602013-08-01 11:04
回复 20楼 suchengjie
你是怎么编译过的?
你的编译器是什么?请赐教...
我很好奇...
#23
peach54602013-08-01 11:05
回复 21楼 wp231957
他的逻辑乱七八糟,七零八凑,结果居然还真是对的
刚才我着实进行了一番脑筋急转弯...
#24
wp2319572013-08-01 11:10
以下是引用peach5460在2013-8-1 11:05:31的发言:

他的逻辑乱七八糟,七零八凑,结果居然还真是对的
刚才我着实进行了一番脑筋急转弯...
嗯  编程 逻辑思维确实挺重要   
我有时候写的笨代码  可能有8-9行  可是被人2-3行就搞定了
#25
suchengjie2013-08-01 12:02
回复 22楼 peach5460
到底是哪里出问题呢?请赐教
#26
peach54602013-08-01 13:49
回复 25楼 suchengjie
你先说你用的什么编译器编译过的...是不是VC6?
另外纠正你的一个说法
18L里面,主函数叫Main...sushu不是主函数

[ 本帖最后由 peach5460 于 2013-8-1 13:51 编辑 ]
#27
peach54602013-08-01 13:53
int sushu(int x)
    {
        while(x>1)
        {
            for(int i=2;i<sqrt(x);i++)
sqrt只有float和double的参数,int会报错
                if(x%i==0)
                    break;
i的作用域只到for里面,这里出循环了,会提示i未定义
                if(i*i>sqrt(x))
                    return 1;
                else
                    return 0;
        }
        if(x<=1)
            return 0;
    }
#28
suchengjie2013-08-01 15:19
回复 26楼 peach5460
我用的是vc6.0编译的
#29
suchengjie2013-08-01 15:20
回复 27楼 peach5460
把i定义在for外面就可以了吧
#30
peach54602013-08-01 15:25
VC6,我就可以理解了
古董级编译器...
#31
suchengjie2013-08-01 15:49
回复 30楼 peach5460
难道你用的是vs2008以上的版本
#32
peach54602013-08-01 16:08
08
应该从05开始i就只在for里面了...

另外你代码的逻辑问题,你画个流程图...
#33
zhengchen0802013-08-02 09:55
回复 楼主 suchengjie
#include<stdio.h>
main()
{
    int i,j,k,l;
    scanf("%d",&l);
    for(i=2;i<=l;i++)
    {
        for(j=2,k=1;j<i;j++)
        {
            if(i%j==0)            
                k++;
        }
        if(k<2)
            printf("%d ",i);
    }
}
打印2到l之间的素数
#34
风雨1232013-08-04 16:41
for(int i=2;i<=sqrt(x);i++)
                if(x%i==0)
                    return 0;
                else  //  此处错了。
                    return 1;
#35
风雨1232013-08-04 17:15
lz你的好复杂
程序代码:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
  int n,i,k;
cin>>n;
k=1;
for(i=2;i<=sqrt(n);i++)
{
  if(n%i==0)
    {      k=0;
      break;
    }
}
if(k==1)
cout<<n<<"是素数"<<endl;
else
cout<<"不是素数"<<endl;

k=1;
return 0;
}



[ 本帖最后由 风雨123 于 2013-8-4 17:38 编辑 ]
#36
suchengjie2013-08-04 17:39
回复 35楼 风雨123
我想用函数来求
#37
peach54602013-08-04 18:38
回复 36楼 suchengjie
你提取一部分出去不就是函数吗?
#38
cs648812792013-08-15 18:44
大哥 这个明显有错误啊....我输入 15,它输出是shusu......你试试
1