在C++程序中怎么求两个数公约数的个数?紧急
在C++程序中怎样求两个数公约数的个数?紧急~~~
假如一个个数字去试的话,前面小的数字还行,但是到后面的大数字就不行了,最大的数有2147483647。就是如20和30的话,公约数个数为4个。各位大神给点思路吧~~~
------解决方案--------------------
输出如下:
公约数:1
公约数:2
公约数:4
公约数:5
公约数:8
公约数:10
公约数:16
公约数:20
公约数:100000000
公约数:25
公约数:32
公约数:40
公约数:50000000
公约数:50
公约数:64
公约数:80
公约数:25000000
公约数:100
公约数:20000000
公约数:125
公约数:128
公约数:160
公约数:12500000
公约数:200
公约数:10000000
公约数:250
公约数:256
公约数:320
公约数:6250000
公约数:400
公约数:5000000
公约数:500
公约数:4000000
公约数:625
公约数:640
公约数:3125000
公约数:800
公约数:2500000
公约数:1000
公约数:2000000
公约数:1250
公约数:1280
公约数:1562500
公约数:1600
公约数:1250000
公约数:2000
公约数:1000000
公约数:2500
公约数:800000
公约数:781250
公约数:3125
公约数:3200
公约数:625000
公约数:4000
公约数:500000
公约数:5000
公约数:400000
公约数:390625
公约数:6250
公约数:6400
公约数:312500
公约数:8000
公约数:250000
公约数:10000
公约数:200000
公约数:12500
公约数:160000
公约数:156250
公约数:15625
公约数:16000
公约数:125000
公约数:20000
公约数:100000
公约数:25000
公约数:80000
公约数:78125
公约数:31250
公约数:32000
公约数:62500
公约数:40000
公约数:50000
81
公约数:1
公约数:10
公约数:2
假如一个个数字去试的话,前面小的数字还行,但是到后面的大数字就不行了,最大的数有2147483647。就是如20和30的话,公约数个数为4个。各位大神给点思路吧~~~
------解决方案--------------------
int gongyueshu(unsigned int no1,unsigned int no2)
{
unsigned int temp;
if(no1 > no2)
{
temp = no1;
no1 = no2;
no2 = temp;
}
vector<int> vFactor;
unsigned int i=1, nTop = no1;
int nCount = 0;
while (i< nTop)
{
nTop = no1/i;
if (no1%nTop ==0 && no2%nTop == 0)
{
vFactor.push_back(nTop);
nCount++;
}
if (nTop != i && no1%i ==0 && no2%i == 0)
{
vFactor.push_back(i);
nCount++;
}
i++;
}
for(int i = 0;i < vFactor.size();i++)
{
cout << "公约数:" << vFactor[i] << endl; // 显示公约数
}
return nCount;
}
int main(int argc, char** argv)
{
cout << gongyueshu(2100000000 ,3100000000) << endl;
cout << gongyueshu(20 ,30) << endl;
double t; //计算运行时间的代码
clock_t time;
time=clock();
t=(double)time/CLK_TCK;
cout<<"time is "<<t<<" seconds "<<endl;
//cout << nCount << endl;
getchar();
return 0;
}
输出如下:
公约数:1
公约数:2
公约数:4
公约数:5
公约数:8
公约数:10
公约数:16
公约数:20
公约数:100000000
公约数:25
公约数:32
公约数:40
公约数:50000000
公约数:50
公约数:64
公约数:80
公约数:25000000
公约数:100
公约数:20000000
公约数:125
公约数:128
公约数:160
公约数:12500000
公约数:200
公约数:10000000
公约数:250
公约数:256
公约数:320
公约数:6250000
公约数:400
公约数:5000000
公约数:500
公约数:4000000
公约数:625
公约数:640
公约数:3125000
公约数:800
公约数:2500000
公约数:1000
公约数:2000000
公约数:1250
公约数:1280
公约数:1562500
公约数:1600
公约数:1250000
公约数:2000
公约数:1000000
公约数:2500
公约数:800000
公约数:781250
公约数:3125
公约数:3200
公约数:625000
公约数:4000
公约数:500000
公约数:5000
公约数:400000
公约数:390625
公约数:6250
公约数:6400
公约数:312500
公约数:8000
公约数:250000
公约数:10000
公约数:200000
公约数:12500
公约数:160000
公约数:156250
公约数:15625
公约数:16000
公约数:125000
公约数:20000
公约数:100000
公约数:25000
公约数:80000
公约数:78125
公约数:31250
公约数:32000
公约数:62500
公约数:40000
公约数:50000
81
公约数:1
公约数:10
公约数:2