作者game0416 (凤狼)
看板NTUE-CS102
标题Re: [闲聊] 程设作业
时间Tue Oct 12 00:06:09 2010
结果我决定今天写,不然明天又没时间摸鱼发呆念点书(?)
新的学期新的开始,新的JAVA号称语法简便却跟这句话一样多点类别就长的不可思议
反正语言这种东西一回事,能明确表达想讲的东西都是好语言
所以程设就是这样一句
「用脑袋模拟程式运作,用程式模拟脑袋思维。」
by 大神 allenown
--
进入正题,这次的作业叫因数分解...也就是把一个数切成数个质数的乘积
如果完全没有头绪去写,那可以先想「如果要进行因数分解需要些什麽、要做些什麽」
因为要把某数分解为质数乘积,所以首先需要的是 1."有哪些数是质数"
有了质数之後,那再来就对传入的数值进行处理...2."这个数会被那些质数除尽"
进而有 3."这个数会被除几次"
最後,只要照格式输出这个结果就完成题目要求了
当然,这是一种比较去省时间的做法...简化的话在文末会提一下
严格说起来,这个题目最难/最简单都是在 1. 的部分
写出个质数表说简单倒也不简单这样...下页就从 1."有哪些数是质数"继续说明
--
建质数表方法很多...顾及撰写时间与程式执行速度
在可预知范围的前提下大概是这招最为有效与合理 (?)
http://tinyurl.com/29x9nvv
int prime[]=new int[]={2,3,5...........};
不过只讲这招这文倒也写不下去,因为顾及分数,所以手动刻一份表是非常合情合理的
质数的判断很简单 "一个不会被1与自己除尽的数"
因此,不顾及时间,最直觉的方法就是 把这个数一直试除取余数看看
比方说..
for (int i=2;i<input;i++)
if (input%i == 0)
System.out.println(input+" is a prime number.")
像是这样的直觉爆解法,然後只要把判断出来的质数丢进去阵列放着就是质数表啦
--
再稍微经过一点数学推论
"能整除一个数的数,一定小於某数开根号"
就可以对这段code小小加速成
for (int i=2;i<Math.sqrt(input);i++)
if (input%i == 0)
System.out.println(input+" is a prime number.")
再进一步的方法就会是"只用之前判断出是质数的数来除"
以及"减少使用取余数与除法的次数"
不过那堆东西写写出来就能直接抄下去了,这样不太好,至少对我成绩来说(y)
有兴趣的可以拿写一半一类的状况另外来问...
这部分观念就请另外gooooooooogle关键字"质数 筛法"来思考
--
取得质数表後,就能进入作业本体的部分
一个层面来说,跟前面取质数的做法很接近
反正就是一直拿质数来测试能不能除尽
这部分应该是只提像是 8 = 2^3怎麽解决就好
照理论上脑袋已经建好的流程图来说,最前头是for loop跑质数
以input=8为例
for (int i=0;prime[i]<Math.sqrt(8);i++)
if (8%prime[i]==0){
...
}
写到这一步应该要做得出来才对?
不然就得套用一下王老大发言了
--
除了input,在这里其实还需要另建一个temp变数,就暂时叫tmp好了
tmp = input
在这个if (8%prime[i]==0)里头
事实上是做一个while去尝试这个input可以被现在找到这个质数除几次
我的作法大概会像是
while (tmp %prime[i] ==0){
power++
tmp/=prime[i]
}
从此来计算次方数,再利用得到这个次方与底数
就直接能输出现在这个底数共有几次方
System.out.print(prime+"^"+power)
说质数只要取到1000底下,则是因为如果把1000底下所有质数都除过除不尽了
那表示最後剩下的数字"也会是质数" 这样
残余针对一次方不输出/其他格式上的问题就请多利用if做几个处理就能得到完整作业啦
--
前头说好不建表又能得到作业的好方法(?)
就是利用爆解质数的方法跟最後这段检查次方去直接跑,因为
"如果是合数,一定会先被该合数的质因数除尽"
所以可以在不做建表的前提下,直接得到分解的答案
然而,如果你到作业死线钱还没搞懂,或是还没开始做
我会推荐你聊胜於无的评分标准 2. 可写成两个数的乘积 (+30%)
这就很简单啦...开个foooooooooooooooooor loooooooooooooooooooop
找到哪个数可以把现在这个数除尽,就把除数跟商数print出来就好
这样至少有个程式可以交代你的分数这样
--
所恐惧的,不是没有知识的大众 所憎恨的,不是深沉幽暗的人心
而是自以为是的思考之声 而是自恃甚高的执法者
所毁灭的,不是温馨和谐的世界 这是我最後的期许,没有愤怒、没有悔恨
而是自欺欺人的梦境 只剩下,浑沌的死亡呼吸
节自 新月神话-弑王者
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.43.50.239
1F:推 CaptainWill:强大 10/12 00:17
2F:推 jerry771210:JACA? 10/12 00:52
3F:推 jerry771210:input int a, output "1*"+a XDD 10/12 00:56
4F:推 Arashinoon:新语法 JACA 语法强度跟安邦JOKE语法有得比 10/12 01:00
5F:推 j2612280:楼上洗爹考 10/12 16:55
※ 编辑: game0416 来自: 220.130.128.171 (10/18 15:52)