菜鸟问题!请高手来答。。

jing78704478 2010-03-08 05:18:30
判断一个数是否是素数
#include<stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i<num;i++)

if(num%i==0) printf("%d不是素数\n",num);
else printf("%d是素数\n",num);

}

高手帮我看看代码,这样编写可不可以?
...全文
160 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jing78704478 2010-03-09
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i<num;i++)
{
if(num%i==0) break;
else i=num;
}
if(num%i==0) printf("%d不是素数\n",num);
else printf("%d是素数\n",num);
}
为什么只加个else i=num,程序就完整了呢?
有谁能帮我解释下为什么要加入else i=num?是什么意思呢?
jing78704478 2010-03-09
  • 打赏
  • 举报
回复
引用 14 楼 breezes2008 的回复:
不懂LZ想干什么。
求素数的方法在网上有一大把,不过你可以借鉴别人的算法,看怎样才效率快。

我只是想按我的编法来试试,这样编可不可行
breezes2008 2010-03-09
  • 打赏
  • 举报
回复
不懂LZ想干什么。
求素数的方法在网上有一大把,不过你可以借鉴别人的算法,看怎样才效率快。
haohaoxuexihere 2010-03-09
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)
{
int num = Int32.Parse(TextBox1.Text);
if (CheckNum(num))
{
Response.Write(num + " 是 质数!");
}
else
{
Response.Write(num + " 不 是质数!");
}
}

/*
* 质数又称素数。
* 指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
* 换句话说,只有两个正因数(1和自己)的自然数即为素数。
*/
public bool CheckNum(int num)
{
if (num == 1)
{
return true;
}
for (int i = 2; i < num / 2; i++)
{
if (num % i == 0)
{
return false;
}
}
return true;
}
hww19898318 2010-03-09
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{int num(int);
int n;
printf("please enter num:");
scanf("%d",&n);
if (num(n))
printf("\n %d是素数.\n”,n) ;
else
printf("\n %d不是素数.\n”,n);
}
int num(int n)
{int flang=1,i;
for(i=2;i<n/2&&flang=1;i++)
if (n%i=0)
flang=o
return(flang)
}
bobo364 2010-03-09
  • 打赏
  • 举报
回复
#include <stdio.h> 
int main()
{
int num,i,flag=0;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i <num;i++)
{
if(num%i==0)
{
flag=0;
break;
}
else
{
flag=1;
}
}
if(flag==0)
{
printf("%d不是素数\n",num);
}
else if(flag==1)
{
printf("%d是素数\n",num);
}
else
{
printf("输入数据有误");
}
system("pause");
return 0;
}


为什么输入任何数值,然后的结果都是输出为:不是素数
那位高手能帮我解释下吗?
因为你的else没写,所以就算是不等于0,但num%i取默认值仍未0,所以程序只有一个结果,上面给你改了
huanmie_09 2010-03-09
  • 打赏
  • 举报
回复
想了一下,去掉标志变量也是可以的。只不过在循环结束后判断素数的条件就应该改为:

if(i > sqrt(num)) {
printf("%d是素数\n",num);
}


源代码:

#include <stdio.h>
#include <math.h>
int main()
{
int num,i;
/* int flag = 1; */ /*设一个标志变量, 1为素数, 0为非素数*/
printf("please enter num:");
scanf("%d", &num);
for(i=2;i <=sqrt(num);i++) { /*这里大括号要英文半角输入*/ /*这里循环上界可以只到sqrt(num)就行了*/
if(num%i==0) {
/*flag = 0; *//*不是素数, 将标志置为0*/
break;
}
}
if(i > sqrt(num)) {
printf("%d是素数\n",num);
}
else {
printf("%d不是素数\n",num);
}
return 0;
}

huanmie_09 2010-03-09
  • 打赏
  • 举报
回复
我用的方法是用num分别除以2-sqrt(num),有一个能除尽就不是素数,否则是素数。
具体是通过以下循环来控制的:

for(i=2;i <=sqrt(num);i++) {/*这里循环上界可以只到sqrt(num)就行了*/
if(num%i==0) {
flag = 0; /*不是素数, 将标志置为0*/
break;
}
}
这里,标志变量的作用就是当num能被2-sqrt(num)中的某一个数字(假设为k, 2=<k<=sqrt(num))整除时,说明该num不是素数,k+1, k+2,..., sqrt(num)就不需要再进行整除了,直接跳出循环,在循环外通过标志变量来判断是不是素数。
引用 6 楼 jing78704478 的回复:
引用 3 楼 huanmie_09 的回复:C/C++ code #include<stdio.h> #include<math.h>int main() {int num,i;int flag=1;/*设一个标志变量, 1为素数, 0为非素数*/ printf("please enter num:"); scanf("%d",&num);for(i=2;i<=sqrt(num);i++) {/*这里大括号要英文半角输?-
不用标志变量编可以吗?
bobo364 2010-03-09
  • 打赏
  • 举报
回复
#include <stdio.h> 
int main()
{
int num,i,flag=0;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i <num;i++)
{
if(num%i==0)
{
flag=0;
}
else
{
flag=1;
}
}
if(flag==0)
{
printf("%d不是素数\n",num);
}
else
{
printf("%d是素数\n",num);
}
system("pause");
return 0;
}


改了下,你原来的写法会输出很多次printf
jing78704478 2010-03-09
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i<num;i++)
{
if(num%i==0)
break;
}
if(num%i==0) printf("%d不是素数\n",num);
else printf("%d是素数\n",num);
}
为什么输入任何数值,然后的结果都是输出为:不是素数
那位高手能帮我解释下吗?
jing78704478 2010-03-09
  • 打赏
  • 举报
回复
引用 3 楼 huanmie_09 的回复:
C/C++ code
#include<stdio.h>
#include<math.h>int main()
{int num,i;int flag=1;/*设一个标志变量, 1为素数, 0为非素数*/
printf("please enter num:");
scanf("%d",&num);for(i=2;i<=sqrt(num);i++) {/*这里大括号要英文半角输?-

不用标志变量编可以吗?
jing78704478 2010-03-09
  • 打赏
  • 举报
回复
4楼的
我按你的这样编可是也不行呢
tcy10992820 2010-03-09
  • 打赏
  • 举报
回复
就这个破题,这么多人来,
jing78704478 2010-03-09
  • 打赏
  • 举报
回复

#include <stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i <num;i++)
{
if(num%i==0) break;
else i=num;
}
if(num%i==0) printf("%d不是素数\n",num);
else printf("%d是素数\n",num);
}
为什么只加个else i=num,程序就完整了
有谁能帮我解释下为什么要加入else i=num?是什么意思呢?
aozhi 2010-03-08
  • 打赏
  • 举报
回复
引用 2 楼 aozhi 的回复:
#include <stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i*i <=num;i++)
  {
    if(num%i==0) break;
      else i=num;
    }
if(i==num)printf("%d是素数\n",num);
else printf("%d不是素数\n",num);
}

更正一下
#include <stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i*i <=num;i++)

if(num%i==0) break;
else i=num;

if(i>=num)printf("%d是素数\n",num);
else printf("%d不是素数\n",num);
}
huanmie_09 2010-03-08
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <math.h>
int main()
{
int num,i;
int flag = 1; /*设一个标志变量, 1为素数, 0为非素数*/
printf("please enter num:");
scanf("%d", &num);
for(i=2;i <=sqrt(num);i++) { /*这里大括号要英文半角输入*/ /*这里循环上界可以只到sqrt(num)就行了*/
if(num%i==0) {
flag = 0; /*不是素数, 将标志置为0*/
break;
}
}
if(flag) {
printf("%d是素数\n",num);
}
else {
printf("%d不是素数\n",num);
}
return 0;
}
aozhi 2010-03-08
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{int num,i;
printf("please enter num:");
scanf("%d",&num);
for(i=2;i*i <=num;i++)

if(num%i==0) break;
else i=num;

if(i==num)printf("%d是素数\n",num);
else printf("%d不是素数\n",num);
}
冻结 2010-03-08
  • 打赏
  • 举报
回复
好像到了num开平方就行了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧