问题 D: 桐桐的数学难题
今天数学课上,桐桐学习了质数的知识:一个正整数如果只能被1和它本身整除,那么这个整数便是质数。桐桐就想:任意一个正整数是否都能分解成若干个质数相乘的形式呢?输入一个正整数n(2≤n≤109),把它分解成质因子相乘的形式,如果为质数则输出该数本身。如:36=2×2×3×3;19=19。你能帮助桐桐解决这个难题吗?
输入
输入一个正整数n(2≤n≤109)
输出
把它分解成质因子相乘的形式,如果为质数则输出该数本身,乘数从小到大输出。
样例输入
99
样例输出
99=3*3*11
提示
c++数学函数的预编译处理:#include<math.h>
package bluebriage; import java.util.*; public class Text{ public static void main(String ages[]) { Scanner num=new Scanner(System.in); long n=num.nextLong(),i; System.out.print(n+"="); for(i=2;i<=n;i++){ while(n!=i) { if(n%i==0) { System.out.print(i+"*"); n/=i; }else { break; } } if(Prime(n)) {//如果不加这个判断可能超时 System.out.println(n); break; } } } public static boolean Prime(long i) { if(i==1) { return false; } for(int j=2;j<=Math.sqrt(i);j++) { if(i%j==0) return false; } return true; } }
当n为一个很大的素数的时候,我们就要条件判断nnnnnnnnnnnn次,但是,如果在循环判断玩后,我们立刻判断这个n是不是素数,是的话就立刻退出走下一步。
这也是看了一些大佬总结出来的结论才得知;感谢大佬们。