洛谷【P1619】 解一元二次方程的烦恼
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html
题目传送门:https://www.luogu.org/problemnew/show/P1619
写完后我觉得我该告诉大家的第一句话就是:
不要深夜在洛谷写这种蓝色难度的模拟题(当然您如果够神写深蓝色难度的也是体会不到我这种蒟蒻今晚尝到的痛苦的。)
这题写的我真是有一种“日了出题人亲娘”爽快的感觉
换行就是这题最难的模拟,一下要换,一下不要换,特殊情况要特判。
然后判质数和分解质因数应该是入门选手都会的了,因为数字不大,所以可以根号\(n\)求法,不需要线性筛质数。
反正这题挺\(fake\)的,我一开始看完题目觉得今晚\(10\)点就可以睡觉了,然后就从\(21:50\)一直\(Wa\)到了\(22:41\)才\(A\)掉\(emmm\)
还有一句劝:不管写什么题都应该先想清楚再动手,不要觉得自己好像可以\(A\)就莽莽撞撞的开了,在码代码的过程中如果漏想了什么思路后面可能会很难想到。如果依靠数据发现了自己漏想的情况改起来也不如一开始就想到那种情况那么简单。而且万一在大型比赛遇到这种情况然后官方给的大数据比较水,那么你可能会以为自己\(A\)了然后开开心心的玩了几天然后就发现自己爆零了…………
总之,希望自己和大家都不要再有这种情况了吧。\(OI\)有风险,开码需谨慎。
时间复杂度:\(O(n+\sqrt{n})\)
空间复杂度:\(O(n)\)
代码如下:
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define ll long long
int top;
char s[25154];//25154是某人学号emmm
int pri[100],sum[100];
bool ispri(ll x) {
if(x==1)return 0;//1特判
for(int i=2;i<=trunc(sqrt(x));i++)
if(x%i==0)return 0;//sqrt(x)复杂度判质数
return 1;
}
void check(ll x) {
top=0;ll num=x;
if(x<2)return;
for(int i=2;i<=trunc(sqrt(x));i++) {
if(num%i==0&&ispri(i)) {
pri[++top]=i;sum[top]=0;
while(num%i==0)
num/=i,sum[top]++;
}
if(num%(x/i)==0&&ispri(x/i)) {
pri[++top]=x/i;sum[top]=0;
while(num%(x/i)==0)
num/=(x/i),sum[top]++;
}//记得要判即使质数又是因数才能算
}
}
int main() {
while(1) {
gets(s);//数字之间可以插入各种符号,包括空格,scanf直接挂。
int len=strlen(s);ll num=0;//就算num>4e7也要判负数,所以必须用long long存下来
printf("Enter the number=\n");
for(int i=0;i<len;i++)
if(s[i]>='0'&&s[i]<='9')num=(num<<1)+(num<<3)+s[i]-'0';
if(!num)break;
printf("Prime? ");
if(ispri(num))puts("Yes!");else puts("No!");
if(num>4e7) {
printf("The number is too large!\n\n");//记得每一组数据之间都有一个空格,所以要换两次行
continue;
}check(num);//分解质因数
for(int i=1;i<=top;i++) {
if(i==1)printf("%lld=",num);
printf("%d^%d",pri[i],sum[i]);
if(i!=top)printf("*");
if(i==top)puts("");//记得换行,这题恶心就恶心在换行
}
printf("\n");//还要换行,至于哪里要换行哪里不要自己可以好好想想
}
return 0;
}
洛谷【P1619】 解一元二次方程的烦恼的更多相关文章
- LuoguP1619 解一元二次方程的烦恼 题解
Content 模拟一个系统,给出一个数 \(n\),让你判断是否是素数,如果是合数的话就要质因数分解. 需要注意的几点: 数字超过 \(4\times 10^7\),输出溢出提示. 数字小于 \(2 ...
- 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 ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 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 ...
- 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...
随机推荐
- python基础-第六篇-6.4模块混战
我们之前接触多的编程方式就是函数式编程,而且喜欢就一个文件里写完所有的程序代码,这样做在前期感觉还不错,不过一旦你的程序变复杂,在易读性和排错方面就感觉好吃力,功能界限不明显,那今天我们就来讲讲怎么用 ...
- android在activity中去掉标题栏
package com.goodness.goodness; import android.support.v7.app.AppCompatActivity; import android.os.Bu ...
- Apache Shiro 使用手册(二)Shiro 认证(转发:http://kdboy.iteye.com/blog/1154652)
认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...
- PAT 天梯赛 L2-010. 排座位 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-010 思路 因为 题意中 朋友的朋友 就是朋友 那么 朋友的关系 用 并查集 保存 但是 敌对关系 只有直接的 ...
- spring mvc实现Restful返回xml格式数据
最近,想在自己的小项目中搭建一个Restful风格的服务接口api,项目用的spring mvc 3,听说spring mvc本身就能十分方便的支持restful的实现,于是查询了下资料,果然非常强大 ...
- c++学习笔记(网上资料)
C++笔记 2007-3-22 1. 程序 —— 可执行文件,人发送给计算机的一组指令. 硬件指令是二进制, ...
- [原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 第三篇 css属性
一.颜色属性 颜色属性有下面四种方式 <div style="color:blueviolet">ppppp</div> <div style=&qu ...
- 第二篇、HTML
一.html文档树 二.HTML分类 块级标签和内联标签: 块级标签:<p><h1><table><ol><ul><form>& ...
- 什么是gitlab CI ?CI代表什么?
CI是Continuous Integration的简称,就是持续集成的意思. 就是说你代码改动了,测试了,提交了,持续集成系统会自动构建(编译等等).持续集成的理念是每个提交的版本都应该是可交付的, ...