输入一个100以内的正整数,将其分解质因数后输出。如输入60,输出60=223*5。
(1)问题的解决代码
#include <math.h>
#include <stdbool.h> //包含bool变量的头文件
#include <stdio.h>
//定义判断质数的函数
bool is_prime(int n)
{
if (n == 2 || n == 3)
{
return true;
}
if (n <= 1 || n % 2 == 0 || n % 3 == 0)
{
return false;
}
int N = (int)sqrt(n);
int i;
for (i = 5; i <= N; i++) //对整数n,如果其在2到sqrt(n)之间没有因子那它就是质数
{
if (n%i == 0)
{
return false;
}
}
return true;
}
int main()
{
long int n; //使用long int类型以输入更大的整数
scanf("%d", &n);
long int i;
int count = 0;
for (i = 1; i <= n; i++)
{
if (n%i == 0 && is_prime(i))
{
if (count == 0)
{
printf("%d", i);
}
else
{
printf("*%d", i);
}
n /= i;
i--; //为了输出多重的质因子,如2*2*2
count = count + 1; //便于判断质因子前是否需要输出乘号
}
}
printf("\n");
return 0;
}
(2)程序运行结果截图
运行结果1:
#include<stdio.h>
void main(){
int m=0,n=2;
printf("请输入待分解整数:");
scanf("%d",&m);
printf("%d=",m);
while(m>=n){
if(m%n==0){//n是m的质因数,也是输入数的质因数
printf("%d",n);
if(m!=n)
printf("*");
else
printf("\n");
m=m/n;//查找m/n的质因数,也是输入数其余的质因数
}else{
++n;
}
}
}
#include <stdio.h>
int main()
{
int n;//合数
int i = 2;//质因数
printf("请输入待分解整数:");
scanf("%d", &n);
while (n != 1)
{
while (n % i == 0)//能整除,说明是质因数
{
printf("%d", i);
n = n / i;//赋予除完质因数的值,来继续找
if (n != 1)//*记得输出,这样写可以避免最后多输出一个*
{
printf("*");
}
}
i++;
}
return 0;
}
#include<stdio.h>
int main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);
return 0;
}
写法及注释如下:
//编程:Code_流苏
#include<iostream>
using namespace std;
int main()
{
//定义正整数n,表示为两个不同的质数的乘积
int n;
//输入n的值
cin>>n;
//判断素数并输出两者中较大的那个质数
for(int i=2;i<=n;i++)
{
if(n%i==0)
{
cout<<n/i;
break;
}
}
cout<<endl;
return 0;
}
如有帮助,还请采纳!谢谢!