这道题算比较难的c++题。
我一开使呢,就觉得这道题超简单
不就是先弄出n的因数,再判断是不是质数不就好了
于是诞生了以下写法
#include<bits/stdc++.h>
using namespace std;
int main (){
int n,sum=1;
cin>>n;
bool flag=true;
int a=n;
for(int i=2;i<=n;i++){
flag=true;
for(int k=1;k<=n/2;k++){
for(int j=2;j<=i-1;j++){
if(i%j==0){
flag=false;
break;
}
}
if(a%i!=0){
break;
}
if((n%i==0)&&(flag==true)){
cout<<i<<" ";
sum*=i;
}
a=a/i;
}
if(sum==n){
break;
}
}
return 0;
}
做完后,我认为没有一点难度
可是,当我兴致冲冲的提交后
呃............ .............................
80 80 80 80分
我的法可(直接口吐芬芳)
我看了看提交情况
Time Limit Exceeded
原来有两道超时了。
一个是:
872105364
质因数是 2 2 3 3 13 1863473
一个是:
998244353
质因数是 998244353
时间限制是每道1秒内
我当时不敢想,赶紧试了这两个数据
然后(有点搞笑).............
他跳跳(跳跳糖),
我等着,1分钟,2分钟..........701秒扫完
《关于1秒和701秒差距》
我幻想着i从这循环了998244353次
从那i循环了998244353次
然后又被循环循环了998244353次...........
想着想着,是不是i跑断腿了,所以过了会儿扎了绷带才又跑的
于是,我决定大发慈悲的让i少跑亿些路
所以我奋战九九八十一天
#include<bits/stdc++.h>
using namespace std;
int main (){
int n,m;
cin>>n;
m=n;
for(int i=2;i<=m;i++){
while(n%i==0){
n=n/i;
cout<<i<<" ";
}
}
return 0;
}
有的人或许会问:“这样不会输出合数吗?”
接下来就是我们的合理分析:
i说:“我的智商高至天花板,上天入地,无所不能!.......当然只会输出质数啦”
i请闭上你的乌鸦嘴
好的,大家别听他BB了,这一切都是我们程序猿搞定的
我们举一个例子
比如24
他肯定有6或8。
i说:“别听他瞎说,我才是功臣”
嗯!!!,i,你在BB我就把你的狗腿打断!!!
现在我要剥夺你的狗叫权
那我们试一下
24除以2==12,12除以2==6,6除以2==3,3除以3=1;
所以2 2 2 3的质因数。
为什么呢,打个比方
有一个餐桌,上面摆满了山珍海味,有小聋瞎,酸菜鱼(又酸又菜又多余),大傻蟹,大鸡腿.......
(别流直下三千尺的口水在你的电脑上,坏了概不负责!!!)
此时for循环让“2”先吃小聋瞎,此时24个食物了变成十二个,2还能再吃一个小聋瞎吗?一扫,还有,于是if在赏了“2”一个小聋瞎,一扫,叒有,与是if再赏了一个小聋瞎,此时12个食物了变成6个
if又赏了(2)小聋瞎,此时6个食物了变成3个。if一看“2”不在是人了,就把2踹了出去。“3”无赖又进来,if一看3原来是人,就赏了3一个大傻蟹,食物只有一个了。等到6来时,依旧剩下一盘大鸡腿,在一看6,好不留情的把6大的屁滚尿流,说剩下是给程序猿的。
这下i只用跑998244352次就好了(i说:“我真的栓Q”)
可是现实总是那么的残酷
60 60 60 60分!!!!!
“你****”我骂道。(i说“本人已嘎,直接摆烂”)
Time Limit Exceeded
叒叒叒超时了。
我为了i的健康,决定
动用我高达250的智商
叒鏖战了九九八十一天
当当
#include<bits/stdc++.h>
using namespace std;
int main (){
int n,m,sum=1;
cin>>n;
m=n;
for(int i=2;i<=m;i++){
while(n%i==0){
n=n/i;
cout<<i<<" ";
sum*=i;
}
if(sum==n){
break;
}
}
return 0;
}
这样i就可以少跑很多路(如果n是质数,那么i依旧跑998244352次,(虚 小声点,别让i听见))
第一次,i说(谢谢让我少跑了那么多路)
..........
第十次,数据 998244353
i说(啊啊啊啊啊啊啊啊,叒要跑998244352次,我不干了!!!)(用了769秒)
由于i已经被我折磨的要死,就有k猛将代替。
#include<bits/stdc++.h>
using namespace std;
int main (){
int n,m;
cin>>n;
m=n;
for(int k=2;k*k<=m;k++){
while(n%k==0){
n=n/k;
cout<<k<<" ";
}
}
if(n>1){
cout<<n;
}
return 0;
}
100 100 100 100分!!!
果然k非常强大(k说:“益达,笑出强大”)
i此时有话说(即生i,又何生程序猿!!!)
随后一命呜呼。
这件事告诉我们:做人从杀i开始。
好了,我要水点字数,为了让更多人看见
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!
点个赞啊,我会继续更新“搞笑”系列
您的赞是我写下去的动力
谢谢大家对我的支持