在大于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;
}