poj 3307 Smart Sister 打表解因子生成数问题

题意:

给i,求由仅以2,3,5,7为因子的数中第i个是多少。

分析:

打表。

代码:

//poj 3307
//sep9
#include <iostream>
using namespace std;
typedef unsigned __int64 INT;
const int maxL=66062;
INT a[maxL+10];
INT min4(INT a,INT b,INT c,INT d)
{
	return min(min(a,b),min(c,d));
}
int main()
{
	int p1,p2,p3,p4,i;
	a[1]=1;
	p1=p2=p3=p4=1;
	for(i=2;i<=maxL;++i){
		INT t=min4(a[p1]*2,a[p2]*3,a[p3]*5,a[p4]*7);
		a[i]=t;
		if(t==a[p1]*2)
			++p1;
		if(t==a[p2]*3)
			++p2;
		if(t==a[p3]*5)
			++p3;
		if(t==a[p4]*7)
			++p4;
	}
	int cases;
	scanf("%d",&cases);
	while(cases--){
		int i;
		scanf("%d",&i);
		printf("%I64u\n",a[i]);
	}
	return 0;
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-11 07:37:35

poj 3307 Smart Sister 打表解因子生成数问题的相关文章

POJ 3307 Smart Sister

先找出所有的数,排序,然后o(1)效率询问 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<map> using namespace std; long long Ans[1200000]; int tot; map<long long, int>Cun; const long long INF = 1e18; void i

poj 3621 Sightseeing Cows(最优比例生成环,01分数规划)

http://poj.org/problem?id=3621 大致题意:给出一个有向图,每个点都有一个点权,每条有向边也都有一个边权,要求出一个环使得环中点权之和与边权之和的比值最大. 思路:和最优比率生成树异曲同工.设点权是v[i],边权是e[i].不同的是这里一个是点,一个是边.怎么像生成树一样把这两个值放到一起呢?可以把他们都转化到边上.同样的二分λ,每次给边重新赋权为v[i] - λ*e[i](v[i]是该边终点的点权).因为要求比值最大,那么在这前提下于图中的所有环都<=0, 所以我们

随机生成数(C++,rand()函数)

1 // 随机生成数 2 srand(time(0));// 设置随机种子 3 int _bgImageNumber = rand() % 5;//设置随机数

HDU 2662 Coin &amp;&amp; HDU 1792 A New Change Problem (互质数最大不能生成数)

证明见here,写的很不错 2662 Coin Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 903    Accepted Submission(s): 437 Problem Description Moon has many coins, but only contains two value types which is 5

猜随机生成数

计算机随机生成一个1-100之内的数字,在7次之内币可以猜中 package hello; import java.util.Scanner; public class Caishu { /**  * @param args  */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int number = (int) (

随机生成数

#include <iostream>#include <ctime>#include <cstdlib> srand( (unsigned)time(NULL)); //生成种子 r = rand()%100; cocos2d-x提供了一个产生随机数的方法 CCRANDOM_0_1 具体定义如下. ? 1 2 3 4 /** @def CCRANDOM_0_1  returns a random float between 0 and 1  */ #define CC

随机生成数,摘自算法竞赛入门经典P120-P123测试STL。

//#include<bits/stdc++.h> #include<cstring> #include<iostream> #include<cstdio> #include<time.h>///调用time的头文件. #include<algorithm> #include<vector> #include<cstdlib>///调用rand的头文件. #include<assert.h>///

Python之随机生成数random模块

代码 #!/usr/bin/env python #coding=utf-8 import random #生成[0, 1)直接随机浮点数 print random.random() #[x, y]中的随机整数 print random.randint(1, 100) list = [1, 2, 3, 4, 5] #随机选取 print random.choice(list) #随机打乱 random.shuffle(list) print list 输出 0.787074152336 95 1

Java中Math.random()的应用(随机生成数的应用)

<1>随即范围Java中a=Math.random()的取值范围为0<=a<=1 由此可得a=Math.random()*n的取值范围是0<=a<=n <2>实际应用 对于要求随机输出一个大写字母 char ss=(char)(int)(26*(Math.random())+65);//表示随机一个大写字母 System.out.println(""+ss); 对已要求随机输出一个小写字母 char es=(char)(int)(26*(