无界
If the only tool you have is a hammer, you tend to see every problem as a nail.
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

埃拉托斯特尼法(筛素数)
 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<iomanip>
 5 #include<set>
 6 using namespace std;
 7 void sieve(set<int>& s,int n)
 8 {
 9     int m,i;
10     s.erase(s.begin (),s.end ());//一定要清空
11     for(i=2;i<n;i++)
12         s.insert (i);
13     int t=sqrt(n);
14     for(m=2;m<=t;m++)
15     {
16         if(s.find (m)!=s.end())
17         {
18             i=2*m;
19             while(i<=n)
20             {
21                 s.erase (i);
22                 i+=m;
23             }
24         }
25     }
26 }
27 int main()
28 {
29     set<int> primeSet;
30     int n;
31     int ccount=0;
32     while(1)
33     {
34     cin>>n;
35     ccount=0;
36     sieve(primeSet,n);
37     set<int>::iterator iter;
38     iter=primeSet.begin ();
39         while(iter!=primeSet.end ())
40         {
41             ccount++;
42         
43             cout<<*iter<<" ";
44             iter++;
45             if(ccount%10==0)
46             cout<<endl;
47         }
48         cout<<endl<<ccount <<endl;
49     }
50     return 0;
51 }

素数筛法是这样的:
    1.开一个大的bool型数组prime[],大小就是n+1就可以了.先把所有的下标为奇数的标为true,下标为偶数的标为false.
    2.然后:
      for( i=3; i<=sqrt(n); i+=2 )
      {   if(prime[i])
          for( j=i+i; j<=n; j+=i ) prime[j]=false;
      }
    3.最后输出bool数组中的值为true的单元的下标,就是所求的n以内的素数了。
    原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质
数的倍数筛掉。
    一个简单的筛素数的过程:n=30。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
   
    第 1 步过后2 4 ... 28 30这15个单元被标成false,其余为true。
    第 2 步开始:
     i=3;  由于prime[3]=true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false.
     i=4;  由于prime[4]=false,不在继续筛法步骤。
     i=5;  由于prime[5]=true, 把prime[10],[15],[20],[25],[30]标为false.
     i=6>sqrt(30)算法结束。
    第 3 步把prime[]值为true的下标输出来:
     for(i=2; i<=30; i++)
     if(prime[i]) printf("%d ",i);
    结果是 2 3 5 7 11 13 17 19 23 29
posted @ 2008-05-08 01:16 杨磊 阅读(792) | 评论 (2) | 编辑 收藏
 
to be written
frustum culling,多重纹理,....
posted @ 2008-04-16 13:27 杨磊 阅读(108) | 评论 (0) | 编辑 收藏
 
做到这80条,我们就结婚
     摘要: 做到这80条,我们就结婚  阅读全文
posted @ 2008-04-07 12:11 杨磊 阅读(159) | 评论 (0) | 编辑 收藏
 
词汇量测试
http://www.test-your-english-now.net/

今天在这个网站上面做了一下词汇量测试

果然是不行啊,只有56/80的成绩

等我把GT考完了再过来测一次,看看我能有多少


posted @ 2008-04-01 16:21 杨磊 阅读(651) | 评论 (3) | 编辑 收藏
 
Things To Do During This Summer Vacation
 

拍照片

 

去旅行

 

小败给我做饭吃

 

陪小败去烫头发

 

教小败JAVA

 

买小甘薯

 

研究一下网站的东西

 

做gym

 

跟小败回北京看爸妈

 

去跟小败做陶艺

 

跟小败去印带有我们照片的T-Shirt

 

posted @ 2008-03-21 22:52 杨磊 阅读(157) | 评论 (0) | 编辑 收藏
 
SGU 102
本来想直接用GCD解决的,后来找了一下,发现了更好的办法

欧拉函数 :
欧拉函数是数论中很重要的一个函数,欧拉函数是指:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) 。

完全余数集合:
定义小于 n 且和 n 互质的数构成的集合为 Zn ,称呼这个集合为 n 的完全余数集合。 显然 |Zn| =φ(n) 。

有关性质:
对于素数 p ,φ(p) = p -1 。
对于两个不同素数 p, q ,它们的乘积 n = p * q 满足 φ(n) = (p -1) * (q -1)  。
这是因为 Zn = {1, 2, 3,  ... , n - 1} - {p, 2p, ... , (q - 1) * p} - {q, 2q, ... , (p - 1) * q} , 则 φ(n) = (n - 1) - (q - 1) - (p - 1) = (p -1) * (q -1)  =φ(p) * φ(q) 。

欧拉定理 :
对于互质的正整数 a 和 n ,有 aφ(n)  ≡ 1 mod n  。

证明:
( 1 ) 令 Zn = {x1, x2, ..., xφ(n)} , S = {a * x1 mod n, a * x2 mod n, ... , a * xφ(n) mod n} ,
        则 Zn = S 。
        ① 因为 a 与 n 互质, xi (1 ≤ i ≤ φ(n)) 与 n 互质, 所以 a * xi  与 n 互质,所以 a * xi  mod n ∈ Zn 。
        ② 若 i ≠ j , 那么 xi ≠ xj,且由 a, n互质可得 a * xi mod n ≠ a * xj mod n (消去律)。

( 2 )     aφ(n) * x1 * x2 *... * xφ(n) mod n
     
≡ (a * x1) * (a * x2) * ... * (a * xφ(n)) mod n
      
≡ (a * x1 mod n) * (a * x2 mod n) * ... * (a * xφ(n) mod n) mod n
     
≡  x1 * x2 * ... * xφ(n) mod n
      对比等式的左右两端,因为
xi  (1 ≤ i ≤ φ(n)) 与 n 互质,所以 aφ(n)  ≡  1 mod n (消去律)。
注:
消去律:如果 gcd(c,p) = 1 ,则 ac ≡ bc mod p ⇒ a ≡ b mod p 。


代码如下:

 

import java.util.*;
import java.io.*;

public class Solution 
{
  
public static void main (String[] argv) throws IOException
  
{
    BufferedReader in 
= new BufferedReader(new InputStreamReader(System.in));
 StringTokenizer st 
= new StringTokenizer(in.readLine());
    
int n = Integer.parseInt(st.nextToken());
    
double j = n;
    
for (int i = 2; i <= n;i++)
     
if (n%i==0)
     
{
      j 
= j * (1 - 1/(double)i);
      
while (n%i==0) 
       n 
= n / i;    
     }

    System.out.println((
int)j);
  }

}


posted @ 2008-03-14 23:11 杨磊 阅读(489) | 评论 (1) | 编辑 收藏
 
zz Oracle Spatial 简介

Oracle Spatial 简介:
        首先,Oracle 支持自定义的数据类型,你可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表。而Oracle Spatial也正是基于此种特性所开发的一套空间数据处理系统。
        Spatial 的自定义数据类型有很多,都在MDSYS方案下,经常使用的是SDO_GEOMETRY类型。SDO_GEOMETRY表示一个几何对象,可以是点、线、面、多点、多线、多面或混合对象。
        Spatial 在此数据类型的基础上,实现了R树空间索引和四叉树空间索引,还以sql函数的形式实现了多种空间分析功能。

Oracle Spatial 使用:
         1、将SDO_GEOMETRY数据类型作为数据表的一个列。

        CREATE TABLE cola_markets (
  mkt_id NUMBER PRIMARY KEY,
  name VARCHAR2(32),
  shape MDSYS.SDO_GEOMETRY);

        2、填写空间元数据。

    INSERT INTO USER_SDO_GEOM_METADATA
  VALUES (
  'cola_markets',
  'shape',
  MDSYS.SDO_DIM_ARRAY(   -- 20X20 grid
    MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.005),
    MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
     ),
  NULL   -- SRID
);

        3、创建空间索引。

CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
        
        至此,空间数据表的创建才算正式完成 。

       4、插入空间数据。空间数据的插入要

INSERT INTO cola_markets VALUES(
  2,
  'cola_b',
  MDSYS.SDO_GEOMETRY(
    2003,  -- 2-dimensional polygon
    NULL,
    NULL,
    MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
    MDSYS.SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
  )
);

        5、空间分析查询示例。

-- Return the topological difference of two geometries.
SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo)
  FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
  AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

posted @ 2008-02-20 16:17 杨磊 阅读(200) | 评论 (0) | 编辑 收藏
 
什么是 SOA?
我们可能应该回答的第一个问题也是最基本的问题。什么是面向服务的体系结构(Service-Oriented Architecture, SOA)?这个问题的答案实际上涉及与开发相关的若干不同方面。

  SOA 是一种 IT 体系结构样式,支持将您的业务作为链接服务或可重复业务任务进行集成,可在需要时通过网络访问这些服务和任务。这个网络可能完全包含在您的公司总部内,也可能分散于各地且采用不同的技术,通过对来自纽约、伦敦和香港的服务进行组合,可让最终用户感觉似乎这些服务就安装在本地桌面上一样。需要时,这些服务可以将自己组装为按需应用程序——即相互连接的服务提供者和使用者集合,彼此结合以完成特定业务任务,使您的业务能够适应不断变化的情况和需求(在有些情况下,甚至不需要人工干预)。

  这些服务是自包含的,具有定义良好的接口,允许这些服务的用户——称为客户机或使用者——了解如何与其进行交互。从技术角度而言,SOA 带来了“松散耦合”的应用程序组件,在此类组件中,代码不一定绑定到某个特定的数据库(甚至不一定绑定到特定的基础设施)。正是得益于这个松散耦合特性,才使得能够将服务组合为各种应用程序。这样还大幅度提高了代码重用率,可以在增加功能的同时减少工作量。由于服务和访问服务的客户机并未彼此绑定,因此可以完全替换用于处理订单的服务,下订单的客户机-服务将永远不会知道这个更改。所有交互都是基于“服务契约”进行的;服务契约用于定义服务提供者和客户机之间的交互。通常,您将通过创建“基于消息的”系统来实现此目标。

  从业务的角度来说,面向服务的体系结构的重点在于开发能帮助您完成业务任务的技术,而不是通过技术约束来规定您的行动。例如,销售过程(制造、运输和收到货款)可能会涉及数十个步骤和若干不同的数据库和计算机系统。但就其实质而言,此过程包含一系列人工活动,例如:

  ﹡销售人员找到潜在客户
  ﹡客户订购产品
  ﹡生产部门制造产品
  ﹡生产部门发出产品
  ﹡收款部门开具产品帐单
  ﹡客户支付产品货款

  面向服务的体系结构基于这些实际活动或业务服务进行组织,而不是形成公司所维护的不同的信息竖井 (Silo)。通过实现 SOA,可以带来大量好处,包括以下各个方面:

  ﹡更高的业务和 IT 一致性
  ﹡基于组件的系统
  ﹡松散耦合的组件和系统
  ﹡基于网络的基础设施,允许分散于各地且采用不同技术的资源协同工作
  ﹡动态构建的按需应用程序
  ﹡更高的代码重用率
  ﹡更好地标准化整个企业内的流程
  ﹡更易于集中企业控制

posted @ 2007-12-18 19:44 杨磊 阅读(128) | 评论 (0) | 编辑 收藏
 
仅列出标题
共10页: First 上一页 2 3 4 5 6 7 8 9 10 
随笔:99 文章:-1 评论:17 引用:0
<2025年7月>
日一二三四五六
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿(1)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • ACM(43) (rss)
  • Boost(5) (rss)
  • 开发感言(2) (rss)
  • 心情日记(3) (rss)

随笔档案

  • 2009年5月 (12)
  • 2009年4月 (26)
  • 2009年3月 (5)
  • 2009年2月 (7)
  • 2009年1月 (1)
  • 2008年12月 (1)
  • 2008年11月 (4)
  • 2008年10月 (1)
  • 2008年8月 (10)
  • 2008年7月 (1)
  • 2008年6月 (7)
  • 2008年5月 (16)
  • 2008年4月 (3)
  • 2008年3月 (2)
  • 2008年2月 (1)
  • 2007年12月 (1)

相册

  • BlogPicture

搜索

  •  

最新评论

  • 1. re: Boost Thread学习笔记三
  • Mediator的构造函数也许缺少一句如下:
    for ( int i = 0; i < _slotCount; i++ ) _pSlot[i] = NULL;
  • --Harly
  • 2. re: SGU 102
  • 博主这个代码的原理是什么啊?看不大懂欸
  • --lph
  • 3. re: Boost Thread学习笔记五
  • 确实厉害
  • --12
  • 4. re: USACO 终于做完了
  • TOPCODER的数据更坑爹。各种challenge会导致各种刁钻数据都被选手钻研出来了
  • --cot
  • 5. re: 各种话题
  • 评论内容较长,点击标题查看
  • --zvin

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 杨磊