给定数字N,我需要找出一个数字的最大素因子的幂是否大于1。
N可以大到10 ^ 18。我的方法如下:
vector<long long> allfactors;
long long current=2;
while(N>1){
while(N%current==0){
allfactors.push_back(current);
N/=current;
}
current++;
if(current*current > N){
if(N>1){
allfactors.push_back(N);
break;
}
}
}
long long ans=1;
for(int i=allfactors.size()-2;i>=0;i--){
if(allfactors[i]!=allfactors[i+1])
break;
else
ans++;
}
if(ans>1){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
可以有更好或更快的方法吗?如果有,怎么样?请帮忙。
答案 0 :(得分:0)
这是我设计的代码。我在projecteuler.net上发现了类似的问题。该数字足以让我使用long long
数据类型。希望能帮助到你。 :)
#include<iostream>
using namespace std;
unsigned int next(long long,unsigned int,unsigned int);
unsigned int store[500];
int main()
{
long long k;
unsigned int max=1;
unsigned int j,min=0,i;
store[0]=2;
cout<<"\nEnter a number : ";
cin>>k;
cout<<"\nPrime factors of the entered number are : \n";
while(k>1)
{
for(i=min;i<max;i++)
{
if(k%store[i]==0)
{
k=k/store[i];
break;
}
}
if(i==max)
{
j=next(k,store[max-1],max);
store[max]=j;
min=max;
max++;
}
}
for(i=0;i<max;i++)
cout<<"\n"<<i<<" "<<store[i];
return 0;
}
unsigned int next(long long k,unsigned int m,unsigned int max)
{
long long i,j;
int flag=0;
for(i=m+1;i<=k;i++)
{
flag=0;
for(j=0;j<max;j++)
{
if(i%store[j]==0)
{
flag=1;
break;
}
}
if(flag==0 && k%i==0)
break;
}
return i;
}