一道求C语言素数的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/07 14:03:10
#include<stdio.h>
int main()
{
int n1,nm,i,j,flag,count=0;
do{
printf("Input START and END=?");
scanf("%d%d",&n1,&nm); /*输入求素数的范围*/
}while(!(n1>0&&n1<nm)); /*输入正确的范围*/
printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);
if(n1==1||n1==2) /*处理素数2*/
{
printf("%4d",2);
n1=3;count++;
}
for(i=n1;i<=nm;i++) /*判定指定范围内的整数是否为素数*/
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
/*判定能否被从3到整数的一半中的某一数所整除*/
if(!(i%j))flag=0; /*若能整除则不是素数*/
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
-------------------------------------------------------
请问for(flag=1,j=3;flag&&j<i/2;j+=2)这句是什么意思?还有count++我看不是在for循环体内啊他是怎么实现的?
不好意思就这十分了!

for(flag=1,j=3;flag&&j<i/2;j+=2):先给flag,j赋值,循环开始后如果flag为0或j<i/2则退出循环,否则j每次加2。
count在printf里,printf在for(i=n1;i<=nm;i++) 循环里。
++count%15?"%4d":"%4d\n"这句话的意思是conut先++,然后%15,为0则用:后面的,不是则用:前面那句。

说明:谁写的程序,很不规范,太不方便阅读了,也不适合学习。写的人是不是想说明自己太很厉害。。。??? 不赞成这样写。

我弄素数一般都这样
static int prime[]=new int[10000],primeLen;
static void getPrime()
{
primeLen=0;
prime[primeLen++]=2;
int i,j=3;
while (j<100000)
{
for (i=0;i<primeLen;i++)
if (j%prime[i]==0||prime[i]*prime[i]>j) break;
if (prime[i]*prime[i]>j) prime[primeLen++]=j;
j+=2;
}
}
static boolean isPrime(int m)
{
int i;
if (m==1) return false;
for (i=0;i<primeLen;i++)
if (m%prime[i]==0||prime[i]*prime[i]>m) break;
if (prime[i]*prime[i]>m) return true;
return false;
}

这个算法确实不怎么样,其实像第一层循环里(if(!(i%2))continue;)一样