c语言求素数的算法

2024年12月02日 23:32
有5个网友回答
网友(1):

根据素数的性质,代码设计如下:

设计一:判断n是否能被1~n-1整除,不能整除为素数

#include

int main()

{

int i, n;

scanf("%d", &n);

for (i = 2; i < n ; i++)

{

if (n%i == 0)

break;

}

if (i < n) printf("This is not a prime.");

else printf("This is a prime.");

return 0;

}

设计二:判断n是否能被2~√n间的整数整除,不能整除为素数

#include

#include

int main()

{

int n,i;

double k;

scanf("%d", &n);

k = sqrt(n);

for (i = 2; i <= k;i++)

{

if (n%i == 0) break;

}

if (i <=k) printf("This is not a prime.");

else printf("This is a prime");

return 0;

}

扩展资料:

1.素数的定义是只能被1和他本身整除,1不是素数.因此要判断一个数是否为素数.就要判断它能不能被比他小的所有素数整除,这是一个算法.(写到算法时,我只能写出用它除以比他小的所有数,造成运算速度低下)

2.如果一个质数大于根号n,而n可以除尽它,那么n必然也可以除尽一个更小的质数。由此可以得到一个法2较快的素数判断算法 

参考资料:百度百科-scanf

参考资料:百度百科-质数

网友(2):

循环嵌套,外层循环是从1-1000的数字i(1排除,这你应该明白),内层是对数字i的素数判断。

素数:除了1和它本身外没有别的因子。也可以理解为:除了1和它本身,其他数来除它余数都不是0。

所以内层循环用从2开始到i的平方根(取整)依次求余,因为到了平方根以后,再增加除数,得到的商是小于平方根的,等于以前取过的除数。所以平方根以后不用再算了。

如果有=0的余数(if(i%j ==0)),说明正在判断的数字不是素数,用break语句退出内层循环;如果没有=0的余数,开关数w不归零,if(w)后的语句执行,计数器n自加一次(找到一个素数),并打印当前检验数i。

打印前有一个if判断,如果计数器n满整10(能够被10整除)就换行,也就是说这个素数表每行10个数。不换行数字键隔一个列表间隔(等于tab)。
另外,团IDC网上有许多产品团购,便宜有口碑

网友(3):

循环嵌套,外层循环是从1-1000的数字i(1排除,这你应该明白),内层是对数字i的素数判断。

素数:除了1和它本身外没有别的因子。也可以理解为:除了1和它本身,其他数来除它余数都不是0。

所以内层循环用从2开始到i的平方根(取整)依次求余,因为到了平方根以后,再增加除数,得到的商是小于平方根的,等于以前取过的除数。所以平方根以后不用再算了。

如果有=0的余数(if(i%j ==0)),说明正在判断的数字不是素数,用break语句退出内层循环;如果没有=0的余数,开关数w不归零,if(w)后的语句执行,计数器n自加一次(找到一个素数),并打印当前检验数i。

打印前有一个if判断,如果计数器n满整10(能够被10整除)就换行,也就是说这个素数表每行10个数。不换行数字键隔一个列表间隔(等于tab)。
另外,站长团上有产品团购,便宜有保证

网友(4):

#include
  
  int IsPrime (int m) {
   int i;
   if (m == 2) return 1;
   if (m == 1 || m % 2 == 0) return 0;
   for (i = 3; i * i <= m;) {
   if (m % i == 0) return 0;
   i += 2;
   }
   return 1;
  }
  
  void main () {
   printf(“They’re primes: \n\t“);
   for (int i = 1; i < 101; i++)
   if (IsPrime(i)) printf(“%d “, i);
   printf(“\n“);
}

网友(5):

int IS_PRIME(int n)
{
int i;
if(n < 2) return 0;
if(n ==2) return 1;
for(i = 2; i< sqrt(n); i++)
{
if(0 == n/i) return 0;
}
return 1;
}