64,683
社区成员
发帖
与我相关
我的任务
分享
#include<vector>
#include<iostream>
using namespace std;
vector<long>Factorization (long M)
{
vector<long> ret;
long k, mul;
vector<long>::size_type i, j, t, n, step;
for (k = 2; k <= M; k++)
{
if (M % k == 0)
{
M = M / k;
if (k % 2 != 0)
ret.push_back (k);
k = 2;
}
}
n = ret.size();
if (n != 0)
{
for (step = 1; step <= n - 1; step++)//这往下,感觉复杂罗嗦,但又不知道怎么改
{
for (i = 0; i < n - step; i ++)
{
for (j = i + step; j <= n - 1; j = j + step)
{
mul = ret[i];
for (t = j - step + 1; t <= j; t++)
mul *= ret[t];
ret.push_back (mul);
}
}
}
}
for (i = 0; i < ret.size(); i ++)
cout << ret[i] << " ";
return ret;
}
int main()
{
Factorization(135);
return 0;
}
vector <unsigned long>Factorization (unsigned long M)
{
vector <unsigned long> ret;
unsigned long a=2,b=M;
unsigned char step;
if (M%a==0)
{
step=1;
}
else
{
step=2;
ret.push_back(M);
}
for(a=3;a <b;a+=step)
{
b=M/a;
if(M%a==0)
{
if(a%2==1)
{
ret.push_back(a);
}
if(b%2==1)
{
ret.push_back(b);
}
}
}
for (unsigned int i = 0; i < ret.size(); i ++)
cout < < ret[i] < < " ";
return ret;
}
int main()
{
Factorization(1000000000);
return 0;
}
void getPriDivs(unsigned int n)
{
--divC;
while(n%2==0) n/=2;
for(unsigned int i=3; i<=n; i+=2) {
if(n%i==0) ++divC;
while(n%i==0) {
priDivs[divC]=i;
++divCnts[divC];
n/=i;
}
}
++divC;
return ;
};
所有奇约数是:
5 25 125 625 3125 15625 78125 390625 1953125
Process returned 0 (0x0) execution time : 0.016 s
Press any key to continue.
#include <iostream>
#include <string>
using namespace std;
unsigned int priDivs[32];
unsigned int divCnts[32];
unsigned int divC;
void init()
{
memset(priDivs,0,32*sizeof(unsigned int));
memset(divCnts,0,32*sizeof(unsigned int));
divC=0;
};
void getPriDivs(unsigned int n)
{
while(n%2==0) n/=2;
for(unsigned int i=3; i<=n; ++i) {
if(n%i==0) ++divC;
while(n%i==0) {
priDivs[divC-1]=i;
++divCnts[divC-1];
n/=i;
}
}
return ;
};
void showOddDivs(unsigned int pro,unsigned int dep)
{
if(dep==divC)
(pro==1)? (cout<<"所有奇约数是:\n") : (cout<<pro<<'\t');
else
for(unsigned int i=0;i<=divCnts[dep];++i,pro*=priDivs[dep])
showOddDivs(pro,dep+1);
return;
}
void Factorization(unsigned int n)
{
init();
getPriDivs(n);
showOddDivs(1,0);
return ;
}
int main()
{
Factorization(1000000000);
return 0;
}
5 25 125 625 3125 15625 78125 390625 1953125
Process returned 0 (0x0) execution time : 0.031 s
Press any key to continue.
#include <iostream>
#include <string>
using namespace std;
unsigned int priDivs[32];
unsigned int divCnts[32];
unsigned int divC;
void init()
{
memset(priDivs,0,32*sizeof(unsigned int));
memset(divCnts,0,32*sizeof(unsigned int));
divC=0;
};
void getPriDivs(unsigned int n)
{
bool cinc=false;
while(n%2==0) n/=2;
for(unsigned int i=3; i<=n; ++i) {
cinc=false;
while(n%i==0) {
cinc=true;
priDivs[divC]=i;
++divCnts[divC];
n/=i;
}
if (cinc) ++divC;
}
return ;
};
void showOddDivs(unsigned int pro,unsigned int dep)
{
if(dep==divC){
if (pro!=1)
cout<<pro<<"\t";
}
else {
for(unsigned int i=0;i<=divCnts[dep];++i)
{
showOddDivs(pro,dep+1);
pro*=priDivs[dep];
}
}
return;
}
void Factorization(unsigned int n)
{
init();
getPriDivs(n);
showOddDivs(1,0);
return ;
}
int main()
{
Factorization(1000000000);
return 0;
}
vector<unsigned long>Factorization (unsigned long M)
{
vector<unsigned long> ret;
unsigned long a=2,b=M;
unsigned char step;
if (M%a==0)
{
step=1;
}
else
{
step=2;
ret.push_back(M);
}
for(a=3;a<b;a+=step)
{
b=M/a;
if(M%a==0)
{
if(a%2==1)
{
ret.push_back(a);
}
if(b%2==1)
{
ret.push_back(b);
}
}
}
for (unsigned int i = 0; i < ret.size(); i ++)
cout << ret[i] << " ";
return ret;
}
int main()
{
Factorization(1000000000);
return 0;
}