首页 > 试题广场 >

输入一个整数n,若n2,则输出0;若n是质数,则输出n的值

[问答题]
在大于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;
}

编辑于 2019-12-06 09:14:23 回复(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;
}

发表于 2021-09-25 09:14:22 回复(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;
}

编辑于 2021-04-10 22:25:23 回复(0)
import java
发表于 2020-11-02 14:15:34 回复(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;
}
编辑于 2017-08-14 11:28:28 回复(1)