Orange Boy Can You Solve It Out? Ep.15
思考题 that is quite easy
FACT
ZJS likes to show off his wonderful calculator. His calculator can do FACT operation which means can divide an integer to some primes' products. For example, Fact(30) will display 2\times3\times5 which is a string of length 5. Fact(60) will display 2^2\times3\times5 which is a string of length 6.
Now he wonders among all integers i under a given number N, what's the max length of the string F(i) produces?
If there are many answers print any.
Note: Fact(1)'s length is 0
Example
N=30
Output should be 30 because 30 is the only number that length is 5.
N=65
Output should be 60 because 60 is the only number that length is 6.
Constriants
Subtask1(33%):2<=N<=1000
Subtask2(33%):2<=N<=1e9
Subtask3(33%):2<=N<=1e12
Subtask4(1%):2<=N<=1e18
Orange Boy thought about a greedy and ACed
Hacker XGN
Anyone wanna use greedy? Test the data 9240
Answer should be 12(one possible output is 8580).
A short program for you to look for the rules:
#include
using namespace std;
string toString(int num){
string ans="";
while(num!=0){
char c=(num%10+'0');
ans=c+ans;
num/=10;
}
return ans;
}
string fact(int num){
string s="";
for(int i=2;i*i<=num;i++){
if(num%i==0){
int cnt=0;
while(num%i==0){
num/=i;
cnt++;
}
if(cnt==1){
s+=toString(i)+"*";
}else{
s+=toString(i)+""+toString(cnt)+"*";
}
}
}
if(num!=1){
s+=toString(num)+"+";
}
s.pop_back();
return s;
}
int main() {
int n;
cin>>n;
int mx=0;
int mxl=0;
for(int i=2;i<=n;i++){
string s=fact(i);
if(s.length()>=mxl){
mxl=s.length();
mx=i;
}
// cout<
版权声明:
作者:XGN
链接:https://blog.hellholestudios.top/archives/204
来源:Hell Hole Studios Blog
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论