我对模拟的理解: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)\)

代码如下:

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. #define ll long long
  6. int top;
  7. char s[25154];//25154是某人学号emmm
  8. int pri[100],sum[100];
  9. bool ispri(ll x) {
  10. if(x==1)return 0;//1特判
  11. for(int i=2;i<=trunc(sqrt(x));i++)
  12. if(x%i==0)return 0;//sqrt(x)复杂度判质数
  13. return 1;
  14. }
  15. void check(ll x) {
  16. top=0;ll num=x;
  17. if(x<2)return;
  18. for(int i=2;i<=trunc(sqrt(x));i++) {
  19. if(num%i==0&&ispri(i)) {
  20. pri[++top]=i;sum[top]=0;
  21. while(num%i==0)
  22. num/=i,sum[top]++;
  23. }
  24. if(num%(x/i)==0&&ispri(x/i)) {
  25. pri[++top]=x/i;sum[top]=0;
  26. while(num%(x/i)==0)
  27. num/=(x/i),sum[top]++;
  28. }//记得要判即使质数又是因数才能算
  29. }
  30. }
  31. int main() {
  32. while(1) {
  33. gets(s);//数字之间可以插入各种符号,包括空格,scanf直接挂。
  34. int len=strlen(s);ll num=0;//就算num>4e7也要判负数,所以必须用long long存下来
  35. printf("Enter the number=\n");
  36. for(int i=0;i<len;i++)
  37. if(s[i]>='0'&&s[i]<='9')num=(num<<1)+(num<<3)+s[i]-'0';
  38. if(!num)break;
  39. printf("Prime? ");
  40. if(ispri(num))puts("Yes!");else puts("No!");
  41. if(num>4e7) {
  42. printf("The number is too large!\n\n");//记得每一组数据之间都有一个空格,所以要换两次行
  43. continue;
  44. }check(num);//分解质因数
  45. for(int i=1;i<=top;i++) {
  46. if(i==1)printf("%lld=",num);
  47. printf("%d^%d",pri[i],sum[i]);
  48. if(i!=top)printf("*");
  49. if(i==top)puts("");//记得换行,这题恶心就恶心在换行
  50. }
  51. printf("\n");//还要换行,至于哪里要换行哪里不要自己可以好好想想
  52. }
  53. return 0;
  54. }

洛谷【P1619】 解一元二次方程的烦恼的更多相关文章

  1. LuoguP1619 解一元二次方程的烦恼 题解

    Content 模拟一个系统,给出一个数 \(n\),让你判断是否是素数,如果是合数的话就要质因数分解. 需要注意的几点: 数字超过 \(4\times 10^7\),输出溢出提示. 数字小于 \(2 ...

  2. java练习题:解一元二次方程、判断闰年、判断标准身材、三个数取最大值

    1.解一元二次方程 注:求根公式为(-b+根号德尔塔)/2a,(-b-根号德尔塔)/2a Scanner sc=new Scanner(System.in); System.out.println(& ...

  3. C语言写解一元二次方程程序心得

    前言:在网上看到不少解一元二次方程的小程序,在使用时总得出一大堆小数,感觉很不爽,遂自己重新写了一遍. 首先,先回忆一下一元二次方程的求根公式: 分别读取二次项.一次项和常数项系数并且求出delta ...

  4. 【Java例题】2.8 解一元二次方程

    8.解一元二次方程. 输入一元二次方程的a,b,c三个系数,解一元二次方程 ax^2+bx+c=0,输出两个根 package study; import java.util.Scanner; pub ...

  5. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  6. c语言解一元二次方程

    C语言解一元二次方程,输入系数a,b,c; #include <stdio.h> #include <math.h> int main(int argc, char *argv ...

  7. 用c++解一元二次方程

    解方程 github项目地址 这两天得知初二的表妹学了一元二次方程,听说还不会解,我就想着试试用C语言编写解方程. 一元二次方程 用公式法 这种方法效果很好: #include"funct. ...

  8. if语句解一元二次方程~

    #include<stdio.h>#include<math.h> void main(){  double a,b,c,x1,x2;  printf("请输入a&q ...

  9. 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)

    点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...

随机推荐

  1. Apache转发规则的一点注意

    RewriteRule ^studio/$ book.php?mod=studio 这种目录转发, 正常情况下是没问题的. 但是当根目录下存在一个 studio 目录时, apache就不会转发URL ...

  2. tf.InteractiveSession()与tf.Session()

    tf.InteractiveSession():它能让你在运行图的时候,插入一些计算图,这些计算图是由某些操作(operations)构成的.这对于工作在交互式环境中的人们来说非常便利,比如使用IPy ...

  3. VMware Integrated OpenStack (VIO)简介

    VMware Integrated OpenStack是一款由VMware提供支持的OpenStack发行版软件,用于帮助IT在现有的VMware基础架构之上更加轻松地运行基于生产级OpenStack ...

  4. R语言读取Excel文档

    在R语言数据管理(三):数据读写一博文中,我曾写到有关读取xls.xlsx文件时一般将文档改成csv文件读取,这是一般做法.csv文件也有其缺点,修改较为麻烦,当文件数据较大时尤为明显.而生活中必不可 ...

  5. sublime 添加 颜色插件 colorcoder

    高亮所有变量,因此可以极大的简化代码定位.尤其是对那些有阅读障碍的程序员非常有帮助.

  6. sublime 添加 注释插件 Docblockr

    https://github.com/spadgos/sublime-jsdocs Package Control Open Package Control: Preferences -> Pa ...

  7. linux shell 中数组使用方法介绍

    linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  8. python基础16 ----面向对象程序设计二

    一.继承与派生 1.继承的定义:继承是一种创建新类的方式,即在类中提取共同的部分创建出一个类,这样的类称为父类,也可称为基类和超类,新建的类称为派生类或子类. 2.单继承:就相当于子类继承了一个父类. ...

  9. Navicat试用期破解方法(转)

    转载网址https://blog.csdn.net/Jason_Julie/article/details/82864187 1.按步骤安装Navicat Premium,如果没有可以去官网下载:ht ...

  10. CodeForces - 580C Kefa and Park 【BFS】

    题目链接 http://codeforces.com/problemset/problem/580/C 题意 根节点是 1 然后所有的叶子结点都是饭店 从根节点到叶子结点的路径上 如果存在 大于m 个 ...