prime number问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 04:52:30
我写的判断n以内的素数的程序如下
#include<stdio.h>
#include<math.h>
main()
{
int n,i,j,flag,num=1;
printf("n:");
scanf("%d",&n);
printf("prime numbers from 2 to %d are listed below:\n",n);
for (i=2;i<=n;i++)
{
flag=1;
for (j=2;j<=(int)sqrt(i);j++)
{
if (i % j ==0)
{
flag=0;
break;
}
}
if(flag==1)
{
printf("%6d",i);
if(num++%10==0)
printf("\n");
}
}
printf("\n");
getch();
}

这个程序本身没有问题。
在win-tc下运行也正常。
但奇怪的是如果我在程序开头声明i,j等这个几个变量的时候把它们声明为long型,也就是把 int 改为 long,那么不管我输入什么数字,这个程序总是运行和得不出结果。窗口中一堆数字一直在不停闪烁。

请高手解答一下这是为什么!
谢谢!

scanf("%d",&n); 要改成scanf("%ld",&n);

long n;
scanf("%d", &n);只处理了16位,另外16位不确定,整个数就不确定
---------------------------------------------------------------------
#include<stdio.h>
#include<math.h>
main()
{
long n,i,j,flag,num=1;
printf("n:");
//scanf("%d",&n);
scanf("%ld",&n); //对于long,这里要用%ld,不能用%d
printf("n=%ld (int)n=%d\n\n",n,n);//上一行换用%d,就可以打印%d,%ld的不同

printf("prime numbers from 2 to %d are listed below:\n",n);
for (i=2;i<=n;i++)
{
flag=1;
for (j=2;j<=(int)sqrt(i);j++)
{
if (i % j ==0)
{
flag=0;
break;
}
}
if(flag==1)
{
printf("%6d",i);
if(num++%10==0)
printf("\n");
}
}
printf("\n");
getch();
}