求一个数是否是素数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 15:09:56
1.在网上看到了这样一个用C写的程序
#include <stdio.h>
#include<math.h>
void main()
{
int number,i;
int Nsqrt;
scanf("%d",&number);
if (number<2)
{
printf("please input a number that is >=2\n");
scanf("%d",&number);
}
Nsqrt=sqrt(number);
for(i=2;i<=Nsqrt;i=i+1)
if(number%i==0) {break;}
if(i==Nsqrt+1) printf("%d is a sushu\n",number);
else printf("%d is not a sushu\n",number);
}
运行时,发现一个warning:warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
这时如果你把Nsqrt改为double类型在编译,警告没有了,但是你输入一个素数:比如13,它打印出来的结果是“13 is a sushu”;而int类型的就没有问题,打印出来的结果就是正确的,请问这是怎么回事。
2.如果我不采用开平方的方式用C去实现这个算法,我下面的这段程序出错在哪里,请高人指点,谢谢,本人是菜鸟。呵呵,虽然是一个很小的算法,但不大会呢!
#include <stdafx.h>
#include <stdio.h>
void main()
{
int i,n;
printf("n:");

1
开方函数原型为
double sqrt(double x)

warning:warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
的意思就是说=不能把一个double型数据赋给整形变量

if(i==Nsqrt+1) printf("%d is a sushu\n",number);
else printf("%d is not a sushu\n",number);
//如果是double型,int i没办法等于有小数部分的Nsqrt+1,取整的话就没问题了

2
if(i=n-1) // 不对,当执行完i=n-1时,i++,于是此时i=n

for(int i=2; i<(n/2); i++){
if(n%i==0){
//n不是素数
break;
}
}