质因数的求解(C语言和C++)

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;
 
}
  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值