poj1142Smith Numbers

筛素数,分解质因子

 1 //Accepted    620 KB    15 ms
2 //wa1 MAXN 太小了一开始用的10005;
3 //wa2 没判断素数
4 //wa3 分解质因子用的小于n
5 #include <cstdio>
6 #include <cstring>
7 const int MAXN = 100005;
8 int pri[MAXN];
9 int cnt;
10 void prime()
11 {
12 for (int i=2;i<MAXN;i++)
13 if (!pri[i])
14 {
15 if ((long long )i*i<(long long )MAXN)
16 for (int j=i*i;j<MAXN;j+=i)
17 pri[j]=1;
18 }
19 cnt=0;
20 for (int i=2;i<MAXN;i++)
21 {
22 if (!pri[i])
23 {
24 pri[cnt++]=i;
25 }
26 }
27 }
28 int getsumn(int n)
29 {
30 int ans=0;
31 while (n>0)
32 {
33 ans+=n%10;
34 n/=10;
35 }
36 return ans;
37 }
38 int judge(int n)
39 {
40 int i=0;
41 int temp=getsumn(n);
42 int sum=0;
43 int flag=0;
44 while (pri[i]*pri[i]<=n)
45 {
46 if (n%pri[i]==0)
47 {
48 flag=1;
49 while (n%pri[i]==0)
50 {
51 sum+=getsumn(pri[i]);
52 n/=pri[i];
53 }
54 }
55 i++;
56 }
57 if (flag==0) return 0;
58 if (n!=1)
59 {
60 sum+=getsumn(n);
61 }
62 if (temp==sum) return 1;
63 return 0;
64 }
65 void slove(int n)
66 {
67 n++;
68 while (judge(n)==0)
69 {
70 n++;
71 }
72 printf("%d\n",n);
73 }
74 int n;
75 int main()
76 {
77 prime();
78 while (scanf("%d",&n),n)
79 {
80 slove(n);
81 }
82 return 0;
83 }

poj1142Smith Numbers

时间: 2024-10-12 14:18:43

poj1142Smith Numbers的相关文章

LeetCode OJ - Sum Root to Leaf Numbers

这道题也很简单,只要把二叉树按照宽度优先的策略遍历一遍,就可以解决问题,采用递归方法越是简单. 下面是AC代码: 1 /** 2 * Sum Root to Leaf Numbers 3 * 采用递归的方法,宽度遍历 4 */ 5 int result=0; 6 public int sumNumbers(TreeNode root){ 7 8 bFSearch(root,0); 9 return result; 10 } 11 private void bFSearch(TreeNode ro

129. Sum Root to Leaf Numbers

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For example, 1 / 2 3 T

421. Maximum XOR of Two Numbers in an Array

Given a non-empty array of numbers, a0, a1, a2, - , an-1, where 0 ≤ ai < 231. Find the maximum result of ai XOR aj, where 0 ≤ i, j < n. Could you do this in O(n) runtime? Example: Input: [3, 10, 5, 25, 2, 8] Output: 28 Explanation: The maximum resul

Humble Numbers(丑数) 超详解!

给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑数为 h[n]. 算法 1: 一种最容易想到的方法当然就是从 2 开始一个一个的判断一个数是否为丑数.这种方法的复杂度约为 O( k * h[n]),铁定超时(如果你这样做而没有超时,请跟 tenshi 联系) 算法 2: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的

【Scala】Scala之Numbers

一.前言 前面已经学习了Scala中的String,接着学习Scala的Numbers. 二.Numbers 在Scala中,所有的数字类型,如Byte,Char,Double,Float,Int,Long,Short都是对象,这七种数字类型继承AnyVal特质,这七种数字类型与其在Java中有相同的范围,而Unit和Boolean则被认为是非数字值类型,Boolean有false和true两个值,你可以获取到各个数字类型的最值. 复杂的数字和日期 如果需要更强大的数类,可以使用spire,sc

2、Add Two Numbers

1.Add Two Numbers--这是leedcode的第二题: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input:

[LeetCode In C++] 2. Add Two Numbers

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 -&

[LeetCode] Compare Version Numbers

Question: Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0. You may assume that the version strings are non-empty and contain only digits and the . character.The 

LeetCode --- 2. Add Two Numbers

题目链接:Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3