zoukankan      html  css  js  c++  java
  • 基础练习 分解质因数

    问题描述
      求出区间[a,b]中所有整数的质因数分解。
    输入格式
      输入两个整数a,b。
    输出格式
      每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
    样例输入
    3 10
    样例输出
    3=3
    4=2*2
    5=5
    6=2*3
    7=7
    8=2*2*2
    9=3*3
    10=2*5
    提示
      先筛出所有素数,然后再分解。
    数据规模和约定
      2<=a<=b<=10000
     
    没啥好说的,遍历就行,遇到质因数输出。
     1 #include<stdio.h>
     2 #include<stdbool.h>
     3 #include<math.h>
     4 
     5 bool isPrimeNum(int n)
     6 {
     7     int i;
     8     int flag = 0;
     9 
    10     for (i = 2; i <= sqrt(n); i++)
    11     {
    12         if (n % i == 0)
    13         {
    14             flag = 1;
    15         }
    16     }
    17 
    18     if (flag == 0)  //flag == 0 so this num is a Prime Num
    19     {
    20         return true;
    21     }
    22     else
    23     {
    24         return false;
    25     }
    26 }
    27 
    28 int main()
    29 {
    30     int a, b;
    31     int i, j;
    32 
    33     scanf("%d %d", &a, &b);
    34     for (i = a; i <= b; i++)
    35     {
    36         int flag2 = 0;
    37         int tem = i;
    38         if (isPrimeNum(i)) //if it is a prime number
    39         {
    40             printf("%d=%d
    ", i,i);
    41         }
    42         else
    43         {
    44             printf("%d=", i);
    45             for (j = 2; j < i; j++)
    46             {
    47                 if (tem % j == 0)  //如果遇到质因数才会输出,即让flag2 = 1;
    48                 {
    49                     tem /= j;
    50                     j--;
    51                     flag2 = 1;
    52                 }
    53 
    54                 if (tem-1 == 0 && flag2 == 1) //如果tem=1了就说明到了最后就不用输出*
    55                 {
    56                     printf("%d", j+1);
    57                 }
    58                 else if(tem-1 != 0 && flag2 == 1)
    59                 {
    60                     printf("%d*",j+1);
    61                 }
    62                 //j--;
    63                 if (tem-1 == 0)
    64                 {
    65                     break;
    66                 }
    67 
    68                 flag2 = 0;
    69             }
    70             printf("
    ");
    71         }
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    HDU2586 How far away?(tarjan的LCA)
    You Raise Me Up
    POJ2891 Strange Way to Express Integers(中国剩余定理)
    POJ2142 The Balance(扩展欧几里得)
    HDU 1166模仿大牛写的线段树
    NetWord Dinic
    HDU 1754 线段树裸题
    hdu1394 Minimum Inversion Number
    hdu2795 Billboard
    【完全版】线段树
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12689968.html
Copyright © 2011-2022 走看看