
用C语言编写一个程序,设计一个判断素数的函数
#include<stdio.h>intprime(intn){intflag=1,i;for(i=2;i<=n/2&&flag==1;i++)if(n%i==0)fla...
#include <stdio.h>
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return(flag);
}
void main()
{int x,y;
printf("请输入一个数\n");
scanf("%d",&x);
y=prime(x);
if (y=1) printf("这个数是素数\n");
else printf("这个数不是素数\n");
}
小弟这个程序自己检查不出来哪里错了 输入什么数都判断成素数 可自己就看不出来哪错了 展开
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return(flag);
}
void main()
{int x,y;
printf("请输入一个数\n");
scanf("%d",&x);
y=prime(x);
if (y=1) printf("这个数是素数\n");
else printf("这个数不是素数\n");
}
小弟这个程序自己检查不出来哪里错了 输入什么数都判断成素数 可自己就看不出来哪错了 展开
6个回答
推荐于2017-09-17 · 知道合伙人软件行家
关注

展开全部
1.素数是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;
2.在数据处理时只需要判读他的因子除了1和他本身就行了,而且只用计算到 这个数的开方就行了,因为后面的因子和前面的就会倒过来。如同 24 -> 2 x 12 和 12 x 2 一样。
#include<stdio.h>
int IsPrime(int n) // 判断是否为素数
{
if (n <= 1) return 0;
if (n % 2 == 0) return n == 2; // 如果是偶数,只要不是2,其他都是非素数
for (int i = 3; ; i += 2)
{
if (i > n/i) break; // 等价于 i*i > n, 不用开方
if (n % i == 0) return 0;
}
return 1;
}
int main()
{
int i, cnt = 0;
for (i = 1; i < 100; i++)
{
if (IsPrime(i))
{
printf("%3d ", i);
if (++cnt%5 == 0) // 每5个换行
printf("\n");
}
}
return 0;
}
展开全部
1.素数是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;
2.在数据处理时只需要判读他的因子除了1和他本身就行了,而且只用计算到
这个数的开方就行了,因为后面的因子和前面的就会倒过来。如同
24
->
2
x
12
和
12
x
2
一样。
#include<stdio.h>
int IsPrime(int n) // 判断是否为素数
{
if (n <= 1) return 0;
if (n % 2 == 0) return n == 2; // 如果是偶数,只要不是2,其他都是非素数
for (int i = 3; ; i += 2)
{
if (i > n/i) break; // 等价于 i*i > n, 不用开方
if (n % i == 0) return 0;
}
return 1;
}
int main()
{
int i, cnt = 0;
for (i = 1; i < 100; i++)
{
if (IsPrime(i))
{
printf("%3d ", i);
if (++cnt%5 == 0) // 每5个换行
printf("\n");
}
}
return 0;
}
2.在数据处理时只需要判读他的因子除了1和他本身就行了,而且只用计算到
这个数的开方就行了,因为后面的因子和前面的就会倒过来。如同
24
->
2
x
12
和
12
x
2
一样。
#include<stdio.h>
int IsPrime(int n) // 判断是否为素数
{
if (n <= 1) return 0;
if (n % 2 == 0) return n == 2; // 如果是偶数,只要不是2,其他都是非素数
for (int i = 3; ; i += 2)
{
if (i > n/i) break; // 等价于 i*i > n, 不用开方
if (n % i == 0) return 0;
}
return 1;
}
int main()
{
int i, cnt = 0;
for (i = 1; i < 100; i++)
{
if (IsPrime(i))
{
printf("%3d ", i);
if (++cnt%5 == 0) // 每5个换行
printf("\n");
}
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将 if(y=1) 改为 if(y==1)
这个可以。
可以 将 for(i=2;i<=n/2&&flag==1;i++)
改为for(i=2;i<=sqrt(n)&&flag==1;i++)可增加效率加math头文件
这个可以。
可以 将 for(i=2;i<=n/2&&flag==1;i++)
改为for(i=2;i<=sqrt(n)&&flag==1;i++)可增加效率加math头文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return flag;
}
void main()
{int x,y;
printf("请输入一个数\n");
scanf("%d",&x);
y=prime(x);
if (y==1) printf("这个数是素数\n");
else printf("这个数不是素数\n");
}
是y==0不是y=0
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return flag;
}
void main()
{int x,y;
printf("请输入一个数\n");
scanf("%d",&x);
y=prime(x);
if (y==1) printf("这个数是素数\n");
else printf("这个数不是素数\n");
}
是y==0不是y=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if (y=1) printf("这个数是素数\n");
应该是
if (y==1) printf("这个数是素数\n");
双等于
应该是
if (y==1) printf("这个数是素数\n");
双等于
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询