• 求n(n>=2)以内的质数/判断一个数是否质数——方法+细节优化


      

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 //判断i是否质数,需要判断i能否被(long)sqrt(i)以内的数整除
     5 //若i能被其中一个质数整除,则i不是质数;否则i是质数
     6 
     7 int main()
     8 {
     9     //n=10 ans=4
    10     //n=100 ans=25
    11     //n=1000 ans=168
    12     //n=10000 ans=1229
    13     //n=100000 ans=9592
    14     //n=1000000 ans=78498
    15     //n=10000000 ans=664579
    16     //n=100000000 ans=5761455
    17     long i,j,n,flag,ans=1,t=1;
    18     long *zhi=(long *) malloc (sizeof(long)*10000000);
    19     scanf("%ld",&n);
    20     zhi[0]=2;
    21     for (i=3;i<=n;i++)
    22     {
    23         //若"zhi[t]*zhi[t]==i"成立,则i不是质数,不用继续判断
    24         //且大于i的数需要用zhi[t]判断(j=0;j<t+1;j++)
    25         //这个方法比"当质数大于(long)sqrt(i)时退出"速度快
    26         //而(zhi[t]-1)*(zhi[t]-1)<=i<=n
    27         //当i小于longint范围都能实现
    28         if (zhi[t]*zhi[t]==i)
    29         {
    30             t++;
    31             continue;
    32         }
    33         flag=1;
    34         for (j=0;j<t;j++)
    35             if (i%zhi[j]==0)
    36             {
    37                 flag=0;
    38                 break;
    39             }
    40         if (flag)
    41         {
    42             zhi[ans]=i;
    43             ans++;
    44         }
    45     }
    46     printf("ans=%ld
    ",ans);
    47     /*
    48     for (i=0;i<ans;i++)
    49         printf("%ld ",zhi[i]);
    50     printf("
    ");
    51     */
    52     /*
    53     if (zhi[ans]==n)
    54         printf("%ld is a prime
    ",n);
    55     else
    56         printf("%ld is not a prime
    ",n);
    57     */
    58     return 0;
    59 }
  • 相关阅读:
    JS-Date日期内置对象
    JS-string内置对象
    MyBatis的事务处理
    MyBatis的简单操作
    MyBatis第一个项目示例
    CSS-盒子模型
    百分比布局的使用
    使用TabLayout快速实现一个导航栏
    彻底理解android中的内部存储与外部存储
    Eclipse的LogCat总是自动清空怎么办?
  • 原文地址:https://www.cnblogs.com/cmyg/p/6555880.html
Copyright © 2020-2023  润新知