1028C基础-质数因子(C++)
题目描述
输入一个正整数,输出它的所有质数的因子(如180的质数因子为2、2、3、3、5)
输入描述
输出描述
样例输入
180
样例输出
2 2 3 3 5
编辑代码
# include<iostream>
using namespace std;
int main()
{
int num;
cin >> num;
for (int i = 2; i <= num; i++)
{
while (num % i == 0)
{
cout << i << ' ';
num = num / i;
}
}
}
求解质因数:
题目:将一个正整数分解质因数。
分析:根据数论的知识可知,任何一个合数都可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数。例如:24=2×2×2×3。现在从键盘输入一个正整数,请编程输出它的所有质因数。
就是一个一个的除看是否能整除,直到K的值不小于n,如果都没有能整除得数,说明n是质数,符合质数的定义,不过应该是k<=(根号n)才对这样效率更高,因为n开平方的值是他能整除的最大的数
这个从根本上看是找出n的最小质因数,因为质数最小为2,所以k的初始值为2,n肯定是大于等于2才有意思,比如:n=12,第一次进入判断,得到12的最小质因数为2,这时n变成了6,第二次进入判断,得到6的最小质因数为2,这时n变为3,第三次进入判断,这时3不能被2整除,所以k++,k变成3,第四次进入判断,3的最小质因数为3,这时n变成1,跳出循环,结束,所以输出了223
方法一:一般解法:
#include <stdio.h>
void main()
{
int i=2,n,k;
printf("输入不小于2的自然数: ");
scanf("%d",&n);
k=n;
printf("%d=",n);
while(k>1)
{
if(k%i==0) {printf("%d*",i);k/=i;}
else i++;
}
printf("\b \b");
}
方法二:数组中的质因数:
#include<stdio.h>
int main()
{
int a[6555], i, j, t=1;
a[0]=2;
for(i=3;i<65540;i+=2)
{
for(j=2;j*j<=i;j++)
{
if(i%j==0)
break;
}
if(j*j>i)
{ a[t]=i; t++; }
}
int n, n1, n2, x, y, f=0 ;
while(scanf("%d",&n)!=EOF)
{
x=0;
for(i=0;a[i]<=n;i++)
if(a[i]==n)
{
printf("%d=1*%d\n", n, n);
x=1;
}
if(x==0){
printf("%d=", n);
for(i=0;a[i]<n;i++)
{
if(n%a[i]==0)
{
n=n/a[i];
printf("%d*",a[i]);
i--;
}
}
printf("%d\n",n);}
}
return 0;
}
#include <stdio.h>
void f(){
int n,a[100],count=0,k;
scanf("%d",&n);
for (k=2;k<n;k++)
{
if(n%k==0)
{
a[count]=k;
count++;
n=n/k;
k--;
}
}
a[count]=n;
for(k=0;k<=count;k++)
{
printf("%d\n",a[k]);
}
}
int main(){
f();
return 0;
}