分解质因数(搞笑)

 这道题算比较难的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开始。

好了,我要水点字数,为了让更多人看见

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞吧,求求了!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!

点个赞啊,我会继续更新“搞笑”系列

您的赞是我写下去的动力

谢谢大家对我的支持

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值