自己写了个 打印100以内所有质数 ,求教
打印100以内质数,请帮我看看,错在哪,我打印出来是2-100,该怎么改,新手在此感过!
int main()
{
int a,i,j;
a=100;
for(i=2;i<=100;i++) //从2到100这些数中找质数
{
for(j=2;j<=a-1;j++)
{
if(i%j!=0)
break;
}
printf("%d ",i);
}
system("pause");
return 0;
}
[解决办法]
帮你稍微修改了下代码,楼主再对照看看
#include <stdio.h>
int main()
{
int a,i,j;
for(i=2; i<100;i++) //从2到100这些数中找质数
{
bool flag = true;
for(j = 2;j< i;j++)
{
if( (i%j) == 0)
{
flag = false;
break;
}
}
if (i == 2 )
flag = true;
if ( flag )
printf("%d ",i);
}
//system("pause");
return 0;
}
int main(){
int primes[30]={2,3};//
int i,j,k=2;
for(i= 5; i < 100; i += 2){
for(j = 1; j < k && i % primes[j]; ++j);
if(j == k)
primes[ k++ ] = i;
}
printf("2..100 有 %d 个素数:\n",k);
for(i = 0; i < k; i++)
printf("%8d" , primes[i]);
return 0;
}
这种思想是
如果 b*b == a
假如有一个素数 x>b且 x<a 使得 x*y =a
则必有大于1的数y = a/x < a/b =b;
那么 检查 a/ y 是否能够整除,就可以检查出 a/x 是否能够整除了。
至于 a/2 如果 a>4 则有a/2 >=2
道理相同。
假如有一个素数 x>a/2 且 x<a 使得 x*y =a
那么必有 y = a /x <= a /(a /2)=2;
只要 检查过a/2 是否能够整除, 就不必检查a/x ,是否能够整除了。