• 质数 唯一分解


    1.第n小质数

    描述

    输入一个正整数n,求第n小的质数。

    输入

    一个不超过10000的正整数n。

    输出

    第n小的质数。

    样例:

    样例输入
    10
    样例输出
    29

    方法:合数一定可以表示成一个比它小的质数的几倍,所以若一个数不能整除比它小的所有的质数,则这个数是质数。

    代码实现:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    int n,z[100001],s;
    bool pd;
    
    int search(double tmp) {
        int k=(int)tmp;//将tmp强制转换成int类型,并赋值给k
        for(int i=1; i<=s; i++) {
            if(z[i]>=k)//如果有一个质数必要查找的数大
                return i+1;//因为tmp是强制转换的,比原数要小,所以i+1,宁大勿小
        }
    }
    
    int main() {
        cin>>n;
        z[1]=2,z[2]=3;//第一个质数为2,第二个质数为3
        s=2;//目前有2个质数
        while(s<n) {
            int tmp=z[s];//把目前最大的质数赋值给tmp
            s++;//质数的个数先加一
            while(1) {
                tmp++;//下一个质数至少比目前的大一
                pd=false;//将pd初始化为false
                int hind=search(sqrt(tmp));//找到要判断的数位于哪两个质数之间 
                /*例:15=3*5,枚举到3时判断了一次,5时又判断了一次,
                造成重复判断。所以判断能否整除比它小的所有的质数,
                仅需判断到根号n即可*/
                for(int i=1; i<=hind; i++) {
                    if(tmp%z[i]==0) { //如果要查找数能够被一个质数整除,那它就不是质数
                        pd=true;
                        break;
                    }
                }
                if(pd) continue;//如果不是质数,跳出寻找下一个数
                z[s]=tmp;//如果找到一个质数,把它存到数组中
                break;
            }
        }
        cout<<z[n]<<endl;
        return 0;
    }
    View Code

    2.质因数分解

    描述

    已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。

    输入

    输入只有一行,包含一个正整数 n。

    对于60%的数据,6 ≤ n ≤ 1000。
    对于100%的数据,6 ≤ n ≤ 2*10^9。

    输出

    输出只有一行,包含一个正整数 p,即较大的那个质数。

    样例:

      样例输入  21 

     样例输出   7

    根据唯一分解定理,若此题有答案,则输入数据满足有且只有一组质数相乘=n。

    代码实现:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath> 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int n;
     9     cin>>n;
    10     int t=sqrt(n);
    11     for(int i=2;i<=t;i++)
    12     {
    13         if(n%i==0)//根据唯一分解,题目保证有解,所以依次枚举,如果有一个数能整除n,则为较小的质数 
    14         {
    15             cout<<n/i<<endl;//n/i则为较大的质数 
    16             return 0;
    17         }
    18     }
    19 } 
    View Code
  • 相关阅读:
    前端笔记-jquery
    git的使用
    前端笔记-bom
    微信小程序没找到构建npm或者没找到node_modules目录
    微信小程序判断 wx:if wx:else
    微信小程序提示云函数部署不成功
    cmd如何进入文件夹
    微信小程序view居中
    vue页面跳转兄弟组件传值
    vue全局变量apiurl
  • 原文地址:https://www.cnblogs.com/wsdestdq/p/6735452.html
Copyright © 2020-2023  润新知