zoukankan      html  css  js  c++  java
  • C_求质数

      质数:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

      题设:输入一个大于1的自然数,求出从2到该数之间所有的质数。

      1.  按照素数的定义来求取,用两个for循环。

     1 #include <stdio.h>
     2 int prime(int i){
     3     int j;
     4     for(j=2;j<i;j++){
     5         if(i%j==0){
     6             return 0;
     7         }
     8     }
     9     return 1;
    10 
    11 }
    12 
    13 int main(void){
    14     int n,i;
    15     printf("请输入一个整数: ");
    16     scanf("%d",&n);
    17     for(i = 2; i <= n; i++){
    18         if(prime(i)){
    19             printf("%d ",i);
    20         }
    21     }
    22     printf("
    ");
    23 
    24 }

      2.  对 1 进行优化,先排除可以被2整除的数(一定不是质数),sqrt()减少循环的区间。

     1 #include <stdio.h>
     2 #include <math.h>
     3 int prime(int i){
     4     int j,temp;
     5     temp=sqrt(i)+1;//sqrt()
     6     for(j=2;j<temp;j++){
     7         if(i%j==0){
     8             return 0;
     9         }
    10     }
    11     return 1;
    12 }
    13 int main(void){
    14     int n,i;
    15     printf("请输入一个整数: ");
    16     scanf("%d",&n);
    17     for(i = 2; i <= n; i++){
    18         if(i % 2 != 0){ //除去2的倍数。
    19             if (prime(i)) {
    20                 printf("%d ",i);
    21             }
    22         }
    23     
    24     }
    25     printf("
    ");
    26 
    27 }

      3.  筛选法

     1 #include "stdio.h"
     2 #include "math.h"
     3 int main(void){
     4     int i,j,n,t,a[10000];
     5     t = 0;
     6     for(i = 0; i < 10000; i++){
     7         a[i] = 1;
     8     }
     9 
    10     printf("请输入一个大于1的整数: ");
    11     scanf("%d",&n);
    12 
    13     for(i = 2; i <= n; i++){
    14         if(a[i] == 1){
    15             for(j = i*2; j <= n; j = j+i){
    16                 a[j] = 0;
    17             }
    18             printf("%d ",i);
    19             t++;
    20         }
    21     }
    22     printf("
    ");
    23     printf("%d",t);
    24 
    25 
    26 }

       3-1  筛选法优化

     1 #include <stdio.h>
     2 #include <math.h>
     3 
     4 int main(){
     5     int arr[1000], i, j, n;
     6     arr[2] = 1;
     7     for(i=3; i<1000; i++){
     8         if(i % 2==0){
     9             arr[i] = 0;
    10         }else{
    11             arr[i] = 1;
    12         }
    13     }
    14 
    15     printf("请输入一个整数: ");
    16     scanf( "%d", &n);
    17 
    18     for(i=2; i<=n; i++){
    19         if (arr[i] == 1){
    20             for(j=i*i; j<=n; j=j+i*2){
    21                 arr[j] = 0;
    22             }
    23 
    24             printf("%d  ",i);
    25         }
    26     
    27     }
    28 
    29 
    30 }
  • 相关阅读:
    cenos7 安装samba
    Cenos7 学习笔记
    mysql学习笔记(一)
    Qt 程序打包发布总结 转
    主机名由localhost变成bogon是怎么回事,怎样变回localhost这个名字?
    Heap Size 与 Stack Size
    数据字节对齐案例
    C语言进阶日志二
    位带操作
    Stm32高级定时器(转自:luowei_memory)
  • 原文地址:https://www.cnblogs.com/LinSL/p/7339015.html
Copyright © 2011-2022 走看看