C语言解决 把1~100依次赋给数组a,求出其中的素数,将素数转化给b数组,并将b数组逆序输出

如题所述

#include<stdio.h>
int f(int n)
{
int i;
for(i=2;i<n;i++)
if(n%i==0)
break;
if(n==i)
return n;
else
return 0;

}

main()
{
int i,a[100],b[64],j;
for(i=1;i<=100;i++)
a[i-1]=i;
for(i=0;i<=99;i++)
{

b[i]=f([a[i]);
if(b[i]==0)
i--;

}
for(j=i;j>=0;j--)
printf("%d\n",b[j]);
}
应该不需要注释吧。。。。如果要的话就追问吧。。。
温馨提示:答案为网友推荐,仅供参考
第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();
}
相似回答