• 求最大公约数和小于n的所有质数


    //algorithm.h
    enum SWAP_TYPE{MEMORY, COMPLEX};
    struct SIntArray
    {
        int *pData;
        int  num;
        SIntArray():pData(NULL),num(0){}
        void Clear(){delete pData; pData = NULL; num = 0;}
    };
    void      Wswap(int &m, int &n, SWAP_TYPE name = MEMORY);
    int       Wgcd(int m, int n);
    SIntArray Wprime(int m);
    
    //algorithm.cpp
    void Wswap(int &m, int &n, SWAP_TYPE name)//交换
    {
        switch(name)
        {
        case MEMORY:
            m = m + n;
            n = m - n;
            m = m - n;
            break;
        case COMPLEX:
            int temp = m;
            m = n;
            n = temp;
            break;
        }
    }
    
    int GCD(int m, int n)
    {
    
        if( n == 0)
        {
            return m;
        }
        else
        {
            int r = m % n;
            GCD(n, r);
        }
    }
    
    int Wgcd(int m, int n)//寻找最大公约数
    {
        if(m > n)
        {
            Wswap(m, n);//make sure m > n    
        }
        int result = GCD(m, n);
        return result;
    }
    
    SIntArray Wprime(int m)//找所有小于m的质数
    {
        SIntArray result;
        if(m <= 0)
        {
            return result;
        }
        int *number = new int [m+1];
        for(int i = 0; i <= m; i++)
        {
            number[i] = i;
        }
    
        int limit = sqrt((float)m);
        for(int j = 2; j <= limit; j++)
        {
            if(number[j] != 0)
            {
                int temp = j*j;// j 2*j   (j-1)*j    1:(j-1) have been processed, so only process j ... n/j
    while(temp <= m) // eliminate { number[temp] = 0; temp = temp + j; } } } int count = 0; for(int j = 2; j <= m; j++) { if(number[j]) { number[count] = number[j]; count++; } } int *out = new int [count]; memcpy(out, number, count*sizeof(int)); delete number; number = NULL; result.pData = out; result.num = count; return result; }
    //main.cpp
    int _tmain(int argc, _TCHAR* argv[]) { /* Wgcd 最大公约数 int m,n; cout<<"input two number:"<<endl; cin>>m>>n; cout<<"greatest common divisor:"<<endl; cout<<Wgcd(m, n)<<endl; */ int m; //小于n的所有质数 cout<<"input one number:"<<endl; cin>>m; cout<<"prime number:"<<endl; SIntArray result; result = Wprime(m); for(int i = 0; i <result.num; i++) { cout<<result.pData[i]<<" "; } result.Clear(); return 0; }
  • 相关阅读:
    3.4 抓取猫眼电影排行
    2.5 代理的基本原理
    第二章 爬虫基础
    1.8 爬虫框架的安装
    Python序列化
    CVE-2020-1938 Apache-Tomcat-Ajp漏洞复现
    Python定制类
    Apache Tomcat DDOS
    内网端口转发工具
    内网渗透思路简单介绍
  • 原文地址:https://www.cnblogs.com/welen/p/3856144.html
Copyright © 2020-2023  润新知