问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
1 /* 2 2020年3月25日18:02:10 3 蓝桥杯习题 4 问题描述 5 求出区间[a,b]中所有整数的质因数分解。 6 输入格式 7 输入两个整数a,b。 8 输出格式 9 每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例) 10 样例输入 11 3 10 12 样例输出 13 3=3 14 4=2*2 15 5=5 16 6=2*3 17 7=7 18 8=2*2*2 19 9=3*3 20 10=2*5 21 提示 22 先筛出所有素数,然后再分解。 23 数据规模和约定 24 2<=a<=b<=10000 25 */ 26 27 #include<iostream> 28 #include<cmath> 29 using namespace std; 30 31 int fun(int n) 32 { 33 int m; 34 m = (int)sqrt(n); 35 int i; 36 for(i = 2; i <= m; i++) 37 { 38 if(n % i == 0) 39 return i; 40 } 41 return n; 42 } 43 44 int main() 45 { 46 int a,b; 47 while(cin >> a >> b) 48 { 49 int i , k; 50 for(i = a; i <= b; i++) 51 { 52 int j = fun(i); 53 k = i / j; 54 cout << i << '=' << j; 55 while(k > 1) 56 { 57 j = fun(k); 58 k = k / j; 59 cout << '*' << j; 60 } 61 cout << endl; 62 } 63 } 64 return 0; 65 }
网上大佬做法真的服了!
/*2020年3月25日18:08:39 判断素数 输入一个整数 输出是否 */ #include<iostream> #include<cmath> using namespace std; int isPrime(int n) { int m; m = (int)sqrt(n); int i; for(i = 2; i <= m; i++) { if(n % i == 0) break; } //如果i全部不能被n整除,i就变成m+1,所以要判断i是否大于m if(i > m) return 1; else return 0; } int main() { int num; while(cin >> num) { if(isPrime(num)) cout << num << "是素数!" << endl; else cout << num << "不是素数!" << endl; } return 0; }
我这条咸鱼终于把素数判断弄懂了。