//algorithm.h
enum SWAP_TYPE{MEMORY, COMPLEX};
struct SIntArray
{
int *pData;
int num;
SIntArray():pData(NULL),num(){}
void Clear(){delete pData; pData = NULL; num = ;}
};
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 == )
{
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 <= )
{
return result;
}
int *number = new int [m+];
for(int i = ; i <= m; i++)
{
number[i] = i;
} int limit = sqrt((float)m);
for(int j = ; j <= limit; j++)
{
if(number[j] != )
{
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] = ;
temp = temp + j;
}
}
}
int count = ;
for(int j = ; 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 = ; i <result.num; i++)
{
cout<<result.pData[i]<<" ";
}
result.Clear(); return ;
}

求最大公约数和小于n的所有质数的更多相关文章

  1. [算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)

    题目 3在十进制下满足若各位和能被3整除,则该数能被3整除. 5在十六进制下也满足此规律. 给定数字k,求多少进制(1e18进制范围内)下能满足此规律,找出一个即可,无则输出-1. 题解 写写画画能找 ...

  2. Euclid求最大公约数

    Euclid求最大公约数算法 #include <stdio.h> int gcd(int x,int y){ while(x!=y){ if(x>y) x=x-y; else y= ...

  3. 算法:欧几里得求最大公约数(python版)

    #欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...

  4. hdu----(5050)Divided Land(二进制求最大公约数)

    Divided Land Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. GCD求最大公约数

    求最大公约数哪个强,果断GCD,非递归版本和递归版本如下: #include<iostream> using namespace std; int gcd(int a, int b){ / ...

  6. C辗转相除法求最大公约数的实现

    int gcd(int a, int b)//求最大公约数,a为分子,b为分母 { ) return a; return gcd(b,a%b); }

  7. 辗转相除法_欧几里得算法_java的实现(求最大公约数)

    辗转相除法,又被称为欧几里德(Euclidean)算法, 是求最大公约数的算法. 当然也可以求最小公倍数. 算法描述 两个数a,b的最大公约数记为GCD(a,b).a,b的最大公约数是两个数的公共素因 ...

  8. 欧几里得求最大公约数--JAVA递归实现

    欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: public class ...

  9. c语言求最大公约数和最小公倍数

    求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因 ...

随机推荐

  1. cmd 导出目录树

    cmd: tree /f >tree.txt

  2. owin中间件

    public class HelloWorldOptions { public HelloWorldOptions() { IncludeTimestamp = true; Name = " ...

  3. VFP笔记

    1.计算圆的面积的计算器 650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/12/43/wKiom1MAsFzxm ...

  4. 使用BeanNameAutoProxyCreator实现spring的自动代理

    提到代理,我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置 ...

  5. C# web api返回类型设置为json的两种方法

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  6. 如何在服务器上搭建git服务器

    参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770 ...

  7. Python之扩展包安装

    读者朋友,在比较新的版本(Python 2 >=2.7.9 or Python 3 >=3.4)中,pip或者easy_install 扩展包命令已经默认安装(可查看   你的安装目录\p ...

  8. php开发中怎么获取服务端MAC地址?

    MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在php中如何获取MAC(M ...

  9. django book

    一.安装配置 1.下载地址: https://www.djangoproject.com/download/ 2.安装: tar zxvf Django-1.6.1.tar.gz && ...

  10. 有感于三个50岁的美国程序员的生活状态与IT职业杂想

    前言 这篇杂记其实是去年也就是 2013年9月30日写的,还上过博客园十日推荐的首页,后来在整理博客分类时七弄八弄误删掉了好多文章,就包括这一篇.今天,2014年9月29日,恰好恰好一年的时候居然在好 ...