华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4077|回复: 16
打印 上一主题 下一主题

分解质因数

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
#
发表于 2018-7-23 09:51:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
输入一个自然数分解质因数,比如100=2*2*5*5。
此题考查对循环的理解,要认真思考。
回复

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
16#
发表于 2018-7-25 07:44:29 | 只看该作者
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int n,m;
  5. int main()
  6. {
  7.         cin>>n;
  8.         cout<<n<<"=";
  9.         int i=2;
  10.         while(n>1)
  11.         {
  12.                 while(n%i==0)
  13.                 {
  14.                         n=n/i;
  15.                         cout<<i;
  16.                         if(n!=1)cout<<"*";
  17.                 }
  18.                 i++;
  19.         }
  20.         return 0;
  21. }
复制代码


回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
15#
 楼主| 发表于 2018-7-24 21:33:58 | 只看该作者
黄同学这个做法好!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

44

积分

新手上路

Rank: 1

积分
44
14#
发表于 2018-7-24 20:22:52 | 只看该作者
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int n,i=2;
  6.         cin>>n;
  7.         cout<<n<<'=';
  8.         do{
  9.                 while(n%i==0)
  10.                 {
  11.                         cout<<i;
  12.                         n/=i;
  13.                         if(n!=1) cout<<'*';
  14.                 }
  15.                 i++;
  16.         }
  17.         while(n!=1);
  18.         return 0;
  19. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

4

帖子

45

积分

新手上路

Rank: 1

积分
45
QQ
13#
发表于 2018-7-24 09:09:21 来自手机 | 只看该作者
#include<iostream>
using namespace std;
#define MAX_NUM 1000000
char isPrime[MAX_NUM+10];//没给数据范围,先开个一百万吧
int main(){       
for(int i=2;i<=MAX_NUM;++i)
        isPrime[i]=1;
        for(int i=2;i<=MAX_NUM;++i){       
        if(isPrime[i])
                for(int j=2*i;j<=MAX_NUM;j+=i)                isPrime[j]=0;        }       
int n;       
cin>>n;       
for(int i=2;i<=MAX_NUM&&n>1;)
        if(isPrime[i])  
                if(n%i==0)
                        n/=i;cout<<i;
                        if(n!=1)cout<<'*';       
}       
        else ++i;
        }
        else ++i;
        return 0;
}
回复 支持 反对

使用道具 举报

0

主题

4

帖子

45

积分

新手上路

Rank: 1

积分
45
QQ
12#
发表于 2018-7-24 09:04:19 来自手机 | 只看该作者
#include<iostream>using namespace std;#define MAX_NUM 1000000char isPrime[MAX_NUM+10];//没给数据范围,先开个一百万吧 int main(){        for(int i=2;i<=MAX_NUM;++i)        isPrime[i]=1;        for(int i=2;i<=MAX_NUM;++i){                if(isPrime[i])                for(int j=2*i;j<=MAX_NUM;j+=i)                isPrime[j]=0;        }        int n;        cin>>n;        for(int i=2;i<=MAX_NUM&&n>1;)        if(isPrime[i]){                if(n%i==0){                        n/=i;cout<<i;                        if(n!=1)cout<<'*';                }                else ++i;        }        else ++i;         return 0;}
回复 支持 反对

使用道具 举报

0

主题

4

帖子

45

积分

新手上路

Rank: 1

积分
45
QQ
11#
发表于 2018-7-24 09:03:54 来自手机 | 只看该作者
手机端好像就只能这样贴代码了
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
10#
 楼主| 发表于 2018-7-23 21:01:43 | 只看该作者
你们再好好想想,怎么都那么复杂呢?11点我来上我的程序。
回复 支持 反对

使用道具 举报

9

主题

89

帖子

292

积分

华一学生

积分
292
9#
发表于 2018-7-23 20:40:46 | 只看该作者
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int n,i;
  5. int zs(int x)
  6. {
  7.     for (int k=2;k<=sqrt(x);k++)
  8.         if (x%k==0) return 0;
  9.     return 1;
  10. }
  11. int main()
  12. {
  13.     cin>>n;
  14.     cout<<n<<"=";
  15.     int i=2;
  16.     for (i=2;i<=sqrt(n);i++)
  17.     {
  18.         if (zs(i))
  19.         {
  20.             while (n%i==0)
  21.             {
  22.                 n=n/i;
  23.                 if (n==1)
  24.                 {
  25.                     cout<<i;
  26.                     return 0;
  27.                 }
  28.                 else cout<<i<<"*";

  29.             }
  30.         }
  31.     }
  32.     return 0;
  33. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
8#
发表于 2018-7-23 19:56:39 | 只看该作者
#include<cstdio>
int n;
int biao;
int main()
{
        scanf("%d",&n);
        if(n==1)
        {
                printf("1=1*1");
                return 0;
        }
        printf("%d=",n);
        for(int i=2;i<=n;i++)
        {
                biao=1;
                for(int j=2;j<i;j++)
                {
                        if(i%j==0)
                        {
                                biao=0;
                                break;
                        }
                }
                if(biao==0)
                {
                        continue;
                }
                while(n%i==0&&n!=i)
                {
                        printf("%d*",i);
                        n/=i;
                }
                if(n==i)
                {
                        printf("%d",i);
                        {
                                break;
                        }
                }
        }
        return 0;
}
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
7#
发表于 2018-7-23 19:54:05 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int n,x=2,a[100],t;
  4. int main()
  5. {
  6.     cin>>n;cout<<n<<'=';
  7.     while(n>1)
  8.     {
  9.         while(n%x==0)a[++t]=x,n/=x;
  10.         x++;
  11.     }
  12.     for(int i=1;i<t;i++)cout<<a[i]<<'*';
  13.     cout<<a[t];
  14.     return 0;
  15. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 02:37 , Processed in 0.290528 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表