码丁实验室,一站式儿童编程学习产品,寻地方代理合作共赢,微信联系:leon121393608。
宝爸之前有说过,软件的灵魂在于算法。那么,对于算法的最直观的变现,就是其驱动的各类设备的强大功能,即所谓的人工智能装置或者各种酷炫的显示效果,即所谓的虚拟现实仿真,以及其他能让普通人震撼的视觉或触觉上的感受。其实,这些都是内在的各种优秀的算法所驱动的。对于算法的研究,宝爸可以辛弃疾的用一句诗来贴切的形容:“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”
算法说明:
每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如30=2×3×5 。分解质因数只针对合数。
参考来源:
《CCF中学生计算机程序设计(基础篇)》P211的eg8.2_2,该书被大多数机构选择为信奥的学习教材。
Scratch实现代码:

首先,点击“绿旗”运行后,系统提示要求输入一个用于分解的数字,

回车确认后,软件将按照上述算法进行求解并输出求解结果。

其他语言的实现代码:
C#:
static void Main(string[] args) { Practice3(); } private static void Practice3() { List<int> a = new List<int>(); //用于存放质因数 Console.WriteLine("请输入一个整数:"); int n = Convert.ToInt32(Console.ReadLine()); int o = n; //用于存放输入的整数 for (int x = 2; x <= n; x++) { if(n%x == 0) { n/=x; a.Add(x); x--; //为了防止该整数有多个相同质因数最终只能输出一个的情况 } } Console.WriteLine("{0}={1}",o,string.Join("*",a.ToArray())); }Pascal:
Var n : Int64 ; i : Longint ;Begin readln( n ) ; if n<>1 then write( n , '=' ) else write( n , '=1' ); i := 2 ; while n<>1 do Begin if ( n mod i )=0 then Begin n := n div i ; write( i ); if n<>1 then write( '*' ); i := 2 ; End else inc( i ) ; End; writeln;End.C:
#include <stdio.h>#include <math.h>int main(){ int i,b; long long int in;/*采用64位整型,以便输入更大的数*/ freopen("F://1.txt","r",stdin); freopen("F://2.txt","w",stdout); while(scanf("%lld",&in)!=EOF) { /*在F://1.txt中输入x个数N(N>=2)以换行符或空格符隔开,当没有输入时循环会自动结束*/ b=0;/*用于标记是否是第一个质因数,第一个质因数在输出时前面不需要加空格*/ for(i=2;in!=1;i++) { if(in%i==0) { in/=i; b?printf("%d",i):printf("%d",i),b=1; i--; /*i--和i++使得i的值不变,即能把N含有的所有的当前质因数除尽,例如:24会一直把2除尽再去除3*/ } printf("n"); } } return 0; }C++:
//将一个数n分解为若干个从小到大排列的质数的积#include <iostream>using namespace std;int main(){ int n, n2; cin >> n; cout << n << "="; n2 = n; if(n<2)return 0; //小于2的数不合法,若n为质数则输出它本身 for(int i = 2;i*i<=n2;i++) //根号n复杂度 { while(n2%i==0) { n2=n2/i; cout << i ; if(n2!=1)cout << "*"; } } if(n2!=1) cout << n2; //当n为质数 return 0;}

