题意:给一个数的指数形式,例:5 1 2 1  num=5^1*2^1  求num-1的质因数分解结果

思路:素数筛法,质因数分解

代码如下:

  1 #include <iostream>
  2 #include <cstring>
  3 #include <algorithm>
  4 #include <cstdio>
  5 #include <cstdlib>
  6 #include <cmath>
  7
  8 using namespace std;
  9
 10 const int N=1000000;
 11 int cnt,tot;
 12 long num;
 13 long prime[N];
 14 bool isprime[N];
 15 string ss;
 16 int a[N],b[N];
 17
 18 void getprime();
 19 void showprime();
 20 void getnum();
 21 bool datecin();
 22 void datecal(long);
 23 void showres();
 24
 25
 26 void getprime()
 27 {
 28     memset(isprime,1,sizeof(isprime));
 29     isprime[0]=isprime[1]=cnt=0;
 30     for(int i=2;i<N;i++)
 31     {
 32         if(isprime[i])
 33             prime[cnt++]=i;
 34         for(int j=0;j<cnt&&i*prime[j]<N;j++)
 35         {
 36             isprime[i*prime[j]]=0;
 37             if(!(i%prime[j]))break;
 38         }
 39     }
 40 }
 41
 42 void showprime()
 43 {
 44     cout<<cnt<<endl;
 45     for(int i=0;i<cnt;i++)
 46         cout<<prime[i]<<' ';
 47     cout<<endl;
 48 }
 49
 50 bool datecin()
 51 {
 52     getline(cin,ss);
 53     if((ss[0]=='0'))
 54     {
 55         return false;
 56     }
 57     getnum();
 58     return true;
 59 }
 60
 61 void getnum()//得到num
 62 {
 63     int l=ss.length();//cout<<l<<endl;
 64     int k=1;
 65     double a,b,sum=1;
 66     for(int i=0;i<l;i++)
 67     {
 68         if(i==0)
 69         {
 70             a=atoi(ss.c_str());
 71         }
 72         else if(ss[i]==' ')
 73         {
 74             i++,k++;
 75             string s=ss.substr(i);
 76             int n=atoi(s.c_str());
 77             if(k==1)
 78             {
 79                 a=n;
 80             }
 81             else if(k==2)
 82             {
 83                 b=n;
 84                 sum*=pow(a,b);
 85                 k=0;
 86                 num=(long)sum;
 87                 //cout<<num<<endl;
 88             }
 89             //cout<<n<<endl;
 90         }
 91     }
 92     num--;
 93     //cout<<num<<endl;
 94 }
 95
 96 void datecal(long num)
 97 {
 98     double temp=sqrt(num)+1;
 99     tot=0;
100     //cout<<'?'<<endl;
101     for(int i=0;temp>prime[i];i++)
102     {
103         if(num%prime[i]==0)
104         {
105             a[++tot]=prime[i];
106             b[tot]=0;
107             while(num%prime[i]==0)
108             {
109                 ++b[tot];
110                 num/=prime[i];
111             }
112         }
113     }
114     if(num!=1)
115     {
116         a[++tot]=num;
117         b[tot]=1;
118     }
119 }
120
121 void showres()
122 {
123     for(int i=tot;i>=1;i--)
124     {
125         printf("%d %d",a[i],b[i]);
126         if(i!=1)
127             printf(" ");
128     }
129     printf("\n");
130 }
131
132 int main()
133 {
134     getprime();
135     //showprime();
136     while(datecin())
137     {
138         datecal(num);
139         showres();
140     }
141     return 0;
142 }

关于输入,因为没有告诉你有多少个数字,用字符串输入转换比较好。

转载于:https://www.cnblogs.com/byzsxloli/p/5438752.html

UVA, 516 Prime Land相关推荐

  1. UVA 516 Prime Land

    UVA516 感觉自己的思维不够灵动变通...特别是写了最近的几道题目之后...感觉得做出加倍努力不然真的就学不进去了..我太难了. #include <iostream> #includ ...

  2. UVA516 POJ1365 LA5533 ZOJ1261 Prime Land【欧拉筛法】

    Everybody in the Prime Land is using a prime base number system. In this system, each positive integ ...

  3. UVA - 524 Prime Ring Problem

    题目链接: UVA - 524 Prime Ring Problem Description(素数环) A ring is composed of n (even number) circles as ...

  4. POJ 1365 Prime Land

    题意不好理解啊.. 以下摘自discuss 已知任意一个大于1的数可以表示成一些素数的乘积,即x=p1^e1*p2^e2-- pn^en (pi 为素数,ei 为对应素数的个数),现给你x的表示,要你 ...

  5. (数学)POJ - 1365 Prime Land

    原题链接:http://poj.org/problem?id=1365 题意: 定义:任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1a1P2a2P3a3.... ...

  6. uva 10140——Prime Distance

    题意:题目出的很简单,给定一个数据范围(好吧,又是给定一个范围),然后问你在这个给定的范围内,哪两个相邻素数挨的最近,哪两个最远. 思路:这破题数据量很大,如果直接打表,铁定T,我蛋疼地打过两边了,T ...

  7. uva 524(Prime Ring Problem UVA - 524 )

    dfs练习题,我素数打表的时候j=i了,一直没发现实际上是j=i*i,以后可记住了.还有最后一行不能有空格...昏迷了半天 我的代码(紫书上的算法) #include <bits/stdc++. ...

  8. UVA 12101 Prime Path (素数筛+BFS)

    题意:给一个四位数的素数,求通过几步变换(一次只能换一个位置的数,且变换过程中只能出现素数)变为目标四位数 分析:素数筛法+BFS,BFS时更换一个数字如果符合条件就加入队列 代码: #include ...

  9. uva 10200 Prime Time

    水题,不过有坑,在输出答案的时候加个1e-5就过了,不加就是wa #include <iostream> #include <cstring> #include <alg ...

最新文章

  1. XCTF联赛“出海计划”开启,八月新加坡站国际赛蓄势待发
  2. python画误差棒/带
  3. 机器人学的几何基础pdf
  4. hibernate版本_基于jsp+mysql+Spring+hibernate+Struts 2的SSH在线蛋糕销售网站平台管理系统...
  5. python字符串转成数组_python将字符串转换成数组的方法
  6. 【Mac版】小i译读安装操作
  7. 最新免费可使用在线音乐网站+多解析源码
  8. VBA函数传递参数方式
  9. 高通android刷机工具,高通android7.0刷机工具使用介绍
  10. linux环境下安装jmeter
  11. VR渲染和CR渲染同样文件的真实对比(附CR渲染参数)
  12. 'sa'登录失败解决方案大全
  13. 如何将EXCEL中的多个单元格内容合并在一个单元格内
  14. 计算机控制技术结束语,电子商务在线 - 计算机控制技术教学改革探索与实践
  15. 神奇的泡泡java游戏,抖音挤泡泡游戏叫什么名字 抖音上很火的减压游戏介绍
  16. len是python的内置函数吗_len(x) 击败 x.len(),从内置函数看 Python 的设计思想(内有公号宣传,不喜勿进)...
  17. Java项目:精美物流管理系统(java+SpringBoot+Vue+maven+Mysql)
  18. MATLAB直接输出棋盘格标定板
  19. canvas绘制刮刮卡,超过一定面积显示全图
  20. 微信小程序获取手机号隐私权限问题处理方案

热门文章

  1. 无纸化车间是怎样实现的,能给企业生产带来什么?
  2. 戴尔服务器r330系统安装,Dell PowerEdge R330
  3. iPhone4S大跌4000港元成跌价王 水货商谨慎进货
  4. android 图片气泡,关于实现微信聊天气泡里显示图片解决方案
  5. 生活小妙方记录:治疗缠腰蛇
  6. 利用python生成微信h5_Python + Appium 微信公众号 H5 页面自动化测试
  7. 华为鸿蒙系统穿戴app,华为应该如何盘活鸿蒙系统?
  8. canvas画笔自定义笔触
  9. iOS 图片裁剪(用户头像裁剪)
  10. 三十八、C++ 信号捕获