LuoguP1619 解一元二次方程的烦恼 题解
Content
模拟一个系统,给出一个数 \(n\),让你判断是否是素数,如果是合数的话就要质因数分解。
需要注意的几点:
- 数字超过 \(4\times 10^7\),输出溢出提示。
- 数字小于 \(2\),输出
No!之后直接进入下一次操作。 - 数字是合数,则进行质因数分解,分解后的格式为
x=x_1^a_1*x_2^a_2*...,其中 \(x_i\) 为这个数从小到大第 \(i\) 个质因子,\(a_i\) 为第 \(i\) 个质因子的指数。 - 输出中会有各种友情提示和换行,请注意每一个细节。
数据范围:\(n\leqslant 4\times 10^7\)。
Solution
这道题目实质上是不难的,至于为什么评为蓝题,个人认为是这恶心的输出方式吧。
在这里给大家总结几点吧——
- 要在输出完
Enter the number=之后换行,不然满屏都是 \(\texttt{WA}\)。原因是第一行太长。 - 要在每个数据之间空一行,不然也会有大面积的 \(\texttt{WA}\)。原因是在某一行会太长(这也就说明了本题的评测方式是逐行比对,且不忽略多余的空格、换行和制表符)。
Prime?之后一定要有一个空格!- 没有数字直接退出,不需要再输出多余的东西。
- 数字溢出,输出完溢出提示后直接进入下一个操作,不需要再输出多余的东西。
- 注意不需要再质因数分解中多出一些空格,诸如
15 = 3 ^ 1 * 5 ^ 1等。
注意以上这几点,这道题目就不算难了。
Code
//注意这里省略了头文件
using namespace std;
bool judge(int x) {
for(int i = 2; i <= floor(sqrt(x) + 0.5); ++i)
if(!(x % i)) return 0;
return 1;
}
void divide(int x) {
int flagone = 1;
for(int i = 2; i <= x; ++i)
if(!(x % i)) {
int cimi = 0;
while(!(x % i)) {
cimi++;
x /= i;
}
if(flagone) flagone = 0;
else printf("*");
printf("%d^%d", i, cimi);
}
}
int main() {
while(1) {
printf("Enter the number=\n");
int num = 0, flag = 0, yichu = 0;
string sa;
getline(cin, sa);
int len = sa.size();
for(int i = 0; i < len; ++i) {
if(sa[i] >= '0' && sa[i] <= '9') {
flag = 1;
num = num * 10 + sa[i] - '0';
}
if(num > 40000000) {
printf("Prime? No!\nThe number is too large!\n\n");
yichu = 1;
break;
}
}
if(!flag) break;
if(yichu) continue;
printf("Prime? ");
if(num < 2) {
printf("No!\n\n");
continue;
}
if(judge(num)) {
printf("Yes!\n\n");
continue;
} else {
printf("No!\n%d=", num);
divide(num);
puts("\n");
}
}
}
LuoguP1619 解一元二次方程的烦恼 题解的更多相关文章
- 洛谷【P1619】 解一元二次方程的烦恼
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P16 ...
- java练习题:解一元二次方程、判断闰年、判断标准身材、三个数取最大值
1.解一元二次方程 注:求根公式为(-b+根号德尔塔)/2a,(-b-根号德尔塔)/2a Scanner sc=new Scanner(System.in); System.out.println(& ...
- C语言写解一元二次方程程序心得
前言:在网上看到不少解一元二次方程的小程序,在使用时总得出一大堆小数,感觉很不爽,遂自己重新写了一遍. 首先,先回忆一下一元二次方程的求根公式: 分别读取二次项.一次项和常数项系数并且求出delta ...
- 【Java例题】2.8 解一元二次方程
8.解一元二次方程. 输入一元二次方程的a,b,c三个系数,解一元二次方程 ax^2+bx+c=0,输出两个根 package study; import java.util.Scanner; pub ...
- c语言解一元二次方程
C语言解一元二次方程,输入系数a,b,c; #include <stdio.h> #include <math.h> int main(int argc, char *argv ...
- 用c++解一元二次方程
解方程 github项目地址 这两天得知初二的表妹学了一元二次方程,听说还不会解,我就想着试试用C语言编写解方程. 一元二次方程 用公式法 这种方法效果很好: #include"funct. ...
- if语句解一元二次方程~
#include<stdio.h>#include<math.h> void main(){ double a,b,c,x1,x2; printf("请输入a&q ...
- 解一元二次方程的C++实现
一元二次方程的根的情况分为实根与虚根两种,代码如下 #include<iostream> #include<cmath> using namespace std; float ...
- 利用离散 Fourier 变换解一元二次方程
设二次方程$$x^2+bx+c=0$$的两个根分别为 $x_1,x_2$.则$$(x-x_1)(x-x_2)=x^2+bx+c.$$因此$$\begin{cases} x_1+x_2=-b\\x_1 ...
随机推荐
- HouseRobber II
// // Created by Administrator on 2021/7/27. // #ifndef C__TEST01_HOUSEROBBER2_HPP #define C__TEST01 ...
- jpa生成uuid
使用jpa可以生成uuid,但是我直接添加数据没有id值会报错,只在程序中有效,如果直接修改数据库需要手动填写,另外长度不要乱填 ,之前填了200,找了半天才找到原因. package com.jav ...
- Object类的toString和Equals方法,以及Objects类的Equals方法
Object类 toString()方法 public class Person { private String name; private int age; public Person() { } ...
- Codeforces 1188E - Problem from Red Panda(找性质+组合数学)
Codeforces 题面传送门 & 洛谷题面传送门 咦,题解搬运人竟是我? 一道很毒的计数题. 先转化下题意,每一次操作我们可以视作选择一种颜色并将其出现次数 \(+k\),之后将所有颜色的 ...
- 【机器学习与R语言】4-决策树
目录 1.决策树原理 2.决策树应用示例 2.1)收集数据 2.2)探索和准备数据 2.3)训练模型 2.4)评估模型性能 2.5)提高模型性能 通过自适应增强算法(boosting) 将惩罚因子分配 ...
- Nginx在make时报错[objs/Makefile:469: objs/src/core/ngx_murmurhash.o] Error
Nginx在make时报错[objs/Makefile:469: objs/src/core/ngx_murmurhash.o] Error 在安装目录下执行 vim obj/Markfile 把 ...
- R语言与医学统计图形-【11】ggplot2几何对象之散点图
ggplot2绘图系统--几何对象之散点图 以geom开头的函数超过30个.几何对象和标度函数scale密不可分.只有在aes中传入某个变量,scale才能发挥作用. 所谓标度scale,就是图形遥控 ...
- 安卓手机添加系统证书方法(HTTPS抓包)
目录 1. 导出证书(以Charles为例) 2. 安卓证书储存格式 3. 将导出的证书计算hash值 4. 生成系统系统预设格式证书文件 5. 上传证书 安卓7.0以后,安卓不信任用户安装的证书,所 ...
- 使用C语言来扩展PHP,写PHP扩展dll
转自http://www.cnblogs.com/myths/archive/2011/11/28/2266593.html 以前写过一次PHP扩展DLL,那个是利用调用系统的COM口实现的扩展,与P ...
- c#页面查询、数据显示
page : <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Queryx ...