• 模拟题6


    题目描述

    问题描述
      求出区间[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
     
     
    View Code
     1 program sky;
    2 var
    3 l,r,i,tot,j,k:longint;
    4 tp:longint;
    5 a:array[0..10000] of longint;
    6 b,c:array[0..10000,0..1000] of longint;
    7 v:array[0..10000] of boolean;
    8 begin
    9 readln(l,r);
    10 for i:=2 to 10000 do
    11 if not v[i] then
    12 begin
    13 inc(tot); a[tot]:=i; j:=2;
    14 while i*j<=10000 do
    15 begin
    16 v[i*j]:=true;
    17 inc(j);
    18 end;
    19 end;
    20 for i:=l to r do
    21 begin
    22 tp:=i;
    23 for j:=1 to tot do
    24 begin
    25 if tp=1 then break;
    26 if tp mod a[j]<>0 then continue;
    27 inc(b[i,0]); b[i,b[i,0]]:=a[j];
    28 while tp mod a[j]=0 do
    29 begin
    30 inc(c[i,b[i,0]]);
    31 tp:=tp div a[j];
    32 end;
    33 end;
    34 end;
    35 for i:=l to r do
    36 begin
    37 write(i,'=');
    38 write(b[i,1]);
    39 for k:=2 to c[i,1] do write('*',b[i,1]);
    40 for j:=2 to b[i,0] do
    41 for k:=1 to c[i,j] do
    42 write('*',b[i,j]);
    43 writeln;
    44 end;
    45 end.


    不大爽的模拟题,

    分解质因数打错了两个地方

    b[i,b[i,0]]:=a[j]而非b[i,b[i,0]]:=j;

    还有就是c数组第一次不用加1,即c[i,b[i,0]]:=1是不必要的

    会出错,后面的过程里会加上的

    输出的时候也有点小麻烦,

    需要特别处理一下第一个。

    skysun原创,http://www.cnblogs.com/skysun

  • 相关阅读:
    交叉编译qt5.4.1遇到的错误
    qt5.4.1官网上找不到
    Runtime dependency gstreameraudio1.0 found: NO (tried pkgconfig and cmake)
    gstreamer库 ubuntu下安装
    gstreamer编译错误
    gstreamer在ubuntu上源码编译
    http学习
    SQL定义变量
    对w3wp.exe的一点认识!
    官方发布!DevExpress WPF 2022年产品升级路线图
  • 原文地址:https://www.cnblogs.com/skysun/p/2437362.html
Copyright © 2020-2023  润新知