第1个回答 2012-12-22
#include<stdio.h>
//#include<math.h>
int f(int n)
{
int i,j;
if(n<2) return 0;
j = n/2;//j=(int)sqrt((double)n);//数字较小直接用n/2似近替代开平方 效率相差不大
for(i=2;i<=j;i++)
if(n%i==0)
return 0;
return n;
}
void main()
{
int i,a[100],b[100/4],j;
//10以内自然数 素数比例40% 100以内自然数 素数比例25% 1000以内自然数 素数比例16.8%
//10000以内自然数 素数比例12.29% 大于100000以内自然数,素数比例小于10%
for(i=1;i<=TOP;i++) a[i-1]=i;//填充数组a
for(j=i=0; i<TOP; i++)
{
a[i] = f(a[i]);//a中非素数置0,素数不变
if(a[i]) b[j++] = a[i]; //素数转存给数组b
}
for(i=j-1;i>=0;i--) printf("%d ",b[i]);//逆序输出b各元素
}
第2个回答 2012-12-22
#include<stdio.h>
int isprime(int n)
{
int j,x;
for(j=2;j<n;j++)
if(n%j==0)
{
x=0;
break;
}
else
x=1;
return(x); //判断是是否是素数的函数 是素数返回值1 不是返回0,并跳出循环
}
int main()
{
int i,a[100],b[100];
for(i=1;i<=100;i++)
{
a[i]=i;
}
for(i=1;i<=100;i++)
{
if(isprime(a[i])==1)
{
b[i]=a[i];
}
if(isprime(a[i])==0)
{
b[i]=0;
}
}
for(i=100;i>=1;i--)
{
if(b[i]!=0)
printf("%d\t",b[i]);
}
getchar();getchar();
}