在大于1的自然数中,除了1和自身外,不能被其它自然数整除的自然数称为质数(素数)。编写完整程序,该程序的功能是:输入一个整数n,若n<2,则输出0;若n是质数,则输出n的值,否则,输出n的质因子分解式,例如:
若n=1, 则输出0
若n=13,则输出13
若n=6, 则输出6=2*3
若n=8, 则输出8=2*2*2
#include <stdio.h> #include <stdlib.h> //输入一个数如果小于1则输出0,大于1的话如果是素数则直接输出 如果不是素数则输出质因数的分解式 //思想:素数的因式只有1和他本身可以利用一个for循环筛选出来,而非素数的因子的组成有三种情况: //都是非素数、素数和非素数的结合、都是非素数 //如果是非素数,通过一个while循环不断的拆解 有递归的思想 void Prim_N(int number) { if(number<2) printf("0\n"); else{ for(int i=2;i<number;i++) { while((number%i==0)&&(number!=i)) { number=number/i; printf("%d*",i); } } printf("%d\n",number); } } int main() { int num; printf("please Input:\n"); scanf("%d",&num); do { Prim_N(num); printf("please Input:\n"); scanf("%d",&num); }while(num!=999); return 0; }
#include<vector> #include<iostream> using namespace std; vector<int> prime_factor(int num){ vector<int> ret; if(num < 2){ ret.push_back(0); return ret; } while(num != 1){ for(int i = 2; i <= num; i ++){ if(num % i == 0){ num /= i; ret.push_back(i); break; } } } } int main(int argc, char *argv[]){ int num; cin >> num; vector<int> r = prime_factor(num); for(int i = 0; i < r.size() - 1; i ++){ cout << r[i] << "*"; } cout << r.back(); return 0; }
#include<iostream> using namespace std; int prmfct(int num); int main() { int num; cin >> num; prmfct(num); return 0; } //求质因子 int prmfct(int num) { if (num < 2){//判断输入,不合法返回 cout << 0; return 0; } int tem = num; cout << num << "=";//输出格式 for (int i = 2; i<=tem/2; i++) { //暴力循环 while (num % i == 0){ cout << i; if ((num /= i) != 1)//不是最后一个质因子时 cout << "*"; } } if (tem == num)//输入本身为质数时 cout << num; return 0; }
#include <stdio.h> #include <math.h> int is_prime(int n) { if (n < 2)return 0; int k = (int)sqrt(n); int i; for (i = 2; i <= k; ++i) { if (n % i == 0)return 0; } return 1; } int main(int argc, char const *argv[]) { int n; while (scanf("%d", &n) != EOF) { if (n < 2) { printf("%d\n", 0); continue; } else if (is_prime(n)) { printf("%d\n", n); continue; } else { printf("%d=", n); int i, k, flag = 1; k = (int)sqrt(n); for (i = 2; i <= k; ++i) { if (n % i == 0) {//i为n的质因子 while (n % i == 0) {//i为n的质因子有多少个? if (flag) { //单独处理第1个质因子 flag = 0; printf("%d", i); } else { printf("*%d", i);//从第2个质因子开始每个前面有*符号 } n /= i; } k = (int)sqrt(n); } } if (n > 1)printf("*%d\n", n);//最后一个质因子 else printf("\n"); } } return 0; }