求1—100间素数,为什么我这样写就求不出来呢,哪位大侠能给解释下。。谢谢~~
#include<stdio.h>
void main()
{
int a[101],i,j;
for(i=1;i<101;i++)
{
a[i]=1;
}
for(i=1;i<=100;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
a[i]=0;break;
}
}
}
for(i=1;i<=100;i++)
{
if(a[i]=1)
printf(“%d “,i);
}
}
>> 本文固定链接: http://www.vcgood.com/archives/2640
看的我挺头疼 我写了一个 你参考一下
#include “stdio.h”
int is_prime(int n);
void main()
{
int n;
printf(“please input an integar: “);
scanf(“%d”,&n);
if (is_prime(n)==1)
printf(“%d is a prime\n”,n);
else
printf(“%d is not a prime\n”,n);
}
int is_prime(int n)
{
int k=2,m;
if (n==2)
m=1;
else
{while(k<n)
{if (n%k!=0)
{++k;m=1;}
else
{m=0;break;}
}
}
return(m);
}
大哥呀,你把倒数弟三行的if(a[i]=1)给我去掉就能输出结果了,如下,可能是你的意思,是素数的为1,不是的为0。
1 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1
0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 Press any key to continue
最后一个for仅仅是输出数组,不需要在家条件。
但我搞不懂你第一个for干嘛把所有数都搞成1,你把a[i]=1;换成a[i]=i;会更好!
1 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 0 0 23 0 0 0 0 0 29 0 31 0 0 0 0 0 37 0 0 0 41 0 43 0 0 0 47 0 0 0 0 0 53 0 0 0 0 0 59 0 61 0 0 0
0 0 67 0 0 0 71 0 73 0 0 0 0 0 79 0 0 0 83 0 0 0 0 0 89 0 0 0 0 0 0 0 97 0 0 0 Press any key to continue
[QUOTE=mhjerry]
大哥呀,你把倒数弟三行的if(a[i]=1)给我去掉就能输出结果了,如下,可能是你的意思,是素数的为1,不是的为0。
1 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1
0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 Press any key to continue
最后一个for仅仅是输出数组,不需要在家条件。
但我搞不懂你第一个for干嘛把所有数都搞成1,你把a[i]=1;换成a[i]=i;会更好!
1 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 0 0 23 0 0 0 0 0 29 0 31 0 0 0 0 0 37 0 0 0 41 0 43 0 0 0 47 0 0 0 0 0 53 0 0 0 0 0 59 0 61 0 0 0
0 0 67 0 0 0 71 0 73 0 0 0 0 0 79 0 0 0 83 0 0 0 0 0 89 0 0 0 0 0 0 0 97 0 0 0 Press any key to continue
[/QUOTE]
倒数第三行的if不能去掉,前面的for循环是标记不是素数的数,所以必须用if。突然发现原来那个if里面应该是if(a[i]==1),哎,我少打了个=好,实在惭愧。。
那不好意思,没明白你的意思!
2楼….人家好像是求100内的素数..不是求某个数是不是素数吖….
[QUOTE=sunnyhuang2008]2楼….人家好像是求100内的素数..不是求某个数是不是素数吖….[/QUOTE]
…算法一样的么,用is_prime()把100以内的数过一遍不就行了么…
我有个思路 就是用if语句 和 i++ 先判断这个数是不是只能被1和他本身整除 或者用大于2的数都除2 看能不能整除 如果能就不是素数 然后慢慢整理思路去改变
只要遍历到sqrt(100)就行了。
for(i=3;i<100;i++)
for(j=1;j<sqrt(i);j++)
{
if(n%i=0)
continue;
printf(“%-4d”,j);
}
只要遍历到sqrt(n)就行了。
for(i=3;i<100;i++)
for(j=1;j<sqrt(i);j++)
{
if(i%j=0)
continue;
printf(“%-4d”,j);
}
上面错了。
直接用算出来的前面的素数来验证后续的是否是素数,这样程序
时间代价是很小的,
另外,sqrt本身是一个浪费时间的操作(从算法的角度,不是机器
时间)。
main()
{
int a[100];
int i,j,pos ;
//a[0]= 2;
pos = -1 ;
for (i=1 ;i<101;i++)
{
for(j=0;j<=pos;j++)
{
if (i%a[j]==0)
break;
}
if (j>pos)
a[pos++] = i ;
}
for (i=0 ;i<pos; i++)
printf(“%d ”, a[i]);
getchar();
}