如果找到了对您有用的资料,烦请点击右手边的Google广告支持我继续共享知识,谢谢! http://dengpeng.spaces.live.com/

2007年10月29日星期一

ISP如何检测控制多机共享ADSL连接

ADSL给大家上网带来的极大地方便,许多家庭都有好几台计算机,通过ADSL共享上网的方式可以各自上网,互不干扰,可最近很多朋友告诉我,如果只有一台机子访问互联网,一切正常,若两台机子都要访问互联网,则都打不开网页,打听来的消息说,电信新装网络硬件:网络尖兵。
  上网查了一下关于网络尖兵的资料,只提到了实现的功能,没有提到实现原理,要想解决不能共享上网必须摸清它的工作原理,ADSL共享上网有两种方式,一种是代理,一种是地址翻译(NAT),大家常说的路由方式其实就是NAT方式,其实路由和NAT的原理还是有区别的,这里不作讨论,现在的ADSL猫一般都有 NAT的功能,用它本身的功能实现共享上网是比经济方便,本文主要讨论这种方式。
  要想阻断一台以上的计算机上网必须能发现共享后边的机器是否多于一台,NAT的工作原理如图一所示,经过NAT转换后访问外网的内网的计算机的地址都变成了192.168.0.1而且MAC地址也转换成了ADSL的MAC地址,也就是说,从原理上讲,直接在ADSL出口抓经过NAT转换的包是不能发现到底有几台机器在上网。那是如何发现的呢?

一、分析原因
  首先用superscan对ADSL猫进行扫描,发现开着161端口,161是SNMP(简单网络管理协议)的服务端口,难道是通过SNMP协议发现的主机数量,用xscan对猫进行了漏洞扫描,果然有默认密码,登陆到猫的管理界面但是找不到关闭SNMP服务的地方,看来是留的后门,由此基本可断定是通过SNMP协议发现的主机数。为了进一步证实,用SNMP的一个管理软件ActiveSNMP查看ADSL猫的连接情况,如图二所示,可以清楚地看出通过SNMP协议可以发现同时上网的主机数量。

 

二、解决方法
  解决的方法就是屏蔽SNMP协议。有以下几个思路。
  1、 猫中没有任何关闭SNMP协议的地方,可以换一个能关闭该协议的猫。
  2、 修改配置文件,可以将配置转换成一个文件,用二进制编辑工具修改默认密码,然后再加载到猫中,这只是一种思路,没有试过。
  3、 买一个ADSL路由器,例如TP-LINK TL-R400,放到如图三所示的地方,在该路由器中再做一个NAT服务,这样进到ADSL猫中的就是一个地址,这样就解决了共享上网。注意在路由器中要关闭SNMP协议。

 

2007年10月14日星期日

比较一下java写文本文件文件的性能

最近对以前开发的一个通用数据迁移的软件进行优化。除了用JDK5.0的多线程技术进行的改进之外,也比较了一下java写文件的性能。
    在java写文件中,通常会使用FileOutputStream和FileWriter,FileWriter只能写文本文件。 FileOutputStream也经常结合BufferedOutputStream。因为实际应用中写文本文件的情况占了大多数。所以下面测试用不同的方式生成一个相同行数、大小相同的文件的三种不同方式。

import java.io.File;
import java.io.FileOutputStream;
import java.io.*;
 
public class FileTest {
    public FileTest() {
    }
 
    public static void main(String[] args) {
        FileOutputStream out = null;
        FileOutputStream outSTr = null;
        BufferedOutputStream Buff=null;
        FileWriter fw = null;
        int count=1000;//写文件行数
        try {
            out = new FileOutputStream(new File("C:/add.txt"));
            long begin = System.currentTimeMillis();
            for (int i = 0; i < count; i++) {
                out.write("测试java 文件操作\r\n".getBytes());
            }
            out.close();
            long end = System.currentTimeMillis();
            System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒");
 
            outSTr = new FileOutputStream(new File("C:/add0.txt"));
             Buff=new BufferedOutputStream(outSTr);
            long begin0 = System.currentTimeMillis();
            for (int i = 0; i < count; i++) {
                Buff.write("测试java 文件操作\r\n".getBytes());
            }
            Buff.flush();
            Buff.close();
            long end0 = System.currentTimeMillis();
            System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒");
 
 
            fw = new FileWriter("C:/add2.txt");
            long begin3 = System.currentTimeMillis();
            for (int i = 0; i < count; i++) {
                fw.write("测试java 文件操作\r\n");
            }
                        fw.close();
            long end3 = System.currentTimeMillis();
            System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");
 
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            try {
                fw.close();
                Buff.close();
                outSTr.close();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}    

以下结果经过多次执行,取常出现的数据,由于只是简单比较,不做详细统计。

1.当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:
FileOutputStream执行耗时:46 豪秒
BufferedOutputStream执行耗时:31 豪秒
FileWriter执行耗时:15 豪秒

2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:
FileOutputStream执行耗时:188 豪秒
BufferedOutputStream执行耗时:32 豪秒
FileWriter执行耗时:16 豪秒

3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:
FileOutputStream执行耗时:1266 豪秒
BufferedOutputStream执行耗时:125 豪秒
FileWriter执行耗时:93 豪秒

4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为18555KB:
FileOutputStream执行耗时:12063 豪秒
BufferedOutputStream执行耗时:1484 豪秒
FileWriter执行耗时:969 豪秒

    由以上数据可以看到,如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的鲁棒性是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢11094毫秒(11秒), BufferedOutputStream比FileWriter慢515毫秒。
    不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在通用数据迁移工具导出数据库2千万条记录生成sql脚本文件的时候,性能性能相差10分钟以上。
    下次有时间再写单线程和多线程对性能的影响。

本文摘自:http://b-qiufeng.javaeye.com/blog/72120

2007年10月6日星期六

惊呼!金正日:“我是一位互联网专家”

中文版:

汉城,韩国-朝鲜领导人金正日在与韩国总统卢武铉在周五的韩朝高峰会谈期间自称是一个"网络专家".
金正日的这番话引起了卢武铉的兴趣,它有意让韩国的通信公司进入朝鲜一些城市开展公众互联网业务.
朝鲜是世界上最封闭的国家之一,除了严密控制信息外,并没有容忍异议的空间.收音机和电视机在北韩只能得到国家广播,百姓都不得使用手机,更遑论上网.但该国的统治精英似乎都经常通过互联网等渠道获取外界信息.

金正日在2000年的时候还向美国前国务卿奥尔布赖特要过电子邮件地址,还称他们有部队有信息相关人员,并且据说还颇有“斩获”...

英文版(美联社报道):

Kim Jong Il: I'm an Internet expert

SEOUL, South Korea (AP) -- North Korean leader Kim Jong Il called himself an "Internet expert" during summit talks with South Korea's president this week, a news report said Friday.

The reclusive leader made the remark after South Korean President Roh Moo-hyun asked that South Korean companies operating at an industrial park in the North Korean city of Kaesong be allowed to use the Internet, Yonhap news agency reported, without citing any source.

"I'm an Internet expert too. It's all right to wire the industrial zone only, but there are many problems if other regions of the North are wired," Kim told Roh, according to Yonhap.

"If that problem is addressed, there is no reason not to open" the Internet, Kim said.

This week's summit - the second-ever such meeting between the two Koreas - produced a wide-ranging reconciliation pact that calls for establishing a new special economic zone in North Korea and expanding the Kaesong factory park.

North Korea is one of the world's most closed nations, with the totalitarian regime tightly controlling outside information and tolerating no dissent. Radios and TV sets in North Korea can only receive state broadcasts and ordinary people are banned from using mobile phones, let alone the Internet.

However, the country's ruling elite appear to have regular access to outside information.

Kim reportedly asked former Secretary of State Madeleine Albright for her e-mail address when she visited Pyongyang in 2000. A North Korean general cracked a joke about President Bush during high-level military talks with the South earlier this year, saying he read it on the Internet.

The North's leader is also a big fan of South Korean movies and TV dramas, and Roh gave him a bookcase of South Korean DVDs as a gift this week.

 

转载自:http://hosted.ap.org/dynamic/stories/N/NKOREA_KIM_INTERNET?SITE=NCAGW&SECTION=HOME&TEMPLATE=DEFAULT

真实的笑话,金胖子太搞笑了,不愧是国家级别的!

2007年10月5日星期五

Install MPICH NT 1.2.5 Step By Step


  1. Download MPICH 1.2.5 from http://www-unix.mcs.anl.gov/mpi/mpich1/download.html


  1. Setup all components in MPICH to local disk. For example, C:Program FilesMPICH


  1. Execute MPIRegister.exe in “C:Program FilesMPICHmpdbin”. Type in the account name and password on this local machine. (NOTE: all the MPI clients should run under the same account and password, or error you will encounter. And firewall need to be disabled on every node.)


  1. To verify your installation, you can run a sample program provided by MPI under “C:Program FilesMPICHSDKExamplesnt“. Please use VC++ 6.0, Visual Studio 2003 .net or Visual Studio 2005 to open the examples.dsw file. Compile all projects to get executable files.


  1. Create a folder and put the same executable files you want to execute on every node in this network. In this example I put cpi.exe into this folder.

For example on node1 “C:MPI”

on node2 “C:MPI”

on node3 “C:MPI”

……

  1. to execute this program, just type mpirun –np 4 cpi. And it will show some information like this below:


C:>cd MPI


C:MPI>mpirun -np 4 cpi

Process 2 on mote.

Process 0 on mote.

Enter the number of intervals: (0 quits)

Process 1 on vmote.

Process 3 on vmote.


C:MPI>mpirun -np 4 cpi

Process 2 on mote.

Process 0 on mote.

Process 3 on vmote.

Process 1 on vmote.

Enter the number of intervals: (0 quits)


You can see that 2 nodes (mote and vmote) are running parallel.

2007年10月4日星期四

How Google Works

http://www.portfolio.com/images/site/editorial/Flash/google/google.swf

英文标点符号翻译大全

+  plus 加号;正号
-  minus 减号;负号
± plus or minus 正负号
× is multiplied by 乘号
÷ is divided by 除号
= is equal to 等于号
≠ is not equal to 不等于号
≡ is equivalent to 全等于号
≌ is equal to or approximately equal to 等于或约等于号
≈ is approximately equal to 约等于号
< is less than 小于号
> is more than 大于号
≮ is not less than 不小于号
≯ is not more than 不大于号
≤ is less than or equal to 小于或等于号
≥ is more than or equal to 大于或等于号
%  per cent 百分之…
‰ per mill 千分之…
∞ infinity 无限大号
∝ varies as 与…成比例
√ (square) root 平方根
∵ since; because 因为
∴ hence 所以
∷ equals, as (proportion) 等于,成比例
∠ angle 角
⌒ semicircle 半圆
⊙ circle 圆
○ circumference 圆周
π pi 圆周率
△ triangle 三角形
⊥ perpendicular to 垂直于
∪ union of 并,合集
∩ intersection of 交,通集
∫ the integral of …的积分
∑ (sigma) summation of 总和
° degree 度
′ minute 分
″ second 秒
℃ Celsius system 摄氏度

{ open brace, open curly 左花括号
} close brace, close curly 右花括号
( open parenthesis, open paren 左圆括号
) close parenthesis, close paren 右圆括号
() brakets/ parentheses 括号
[ open bracket 左方括号
] close bracket 右方括号
[] square brackets 方括号
. period, dot 句号,点
| vertical bar, vertical virgule 竖线
& ampersand, and, reference, ref 和,引用
* asterisk, multiply, star, pointer 星号,乘号,星,指针
/ slash, divide, oblique 斜线,斜杠,除号
// slash-slash, comment 双斜线,注释符
# pound 井号
\ backslash, sometimes escape 反斜线转义符,有时表示转义符或续行符
~ tilde 波浪符
. full stop 句号
, comma 逗号
: colon 冒号
; semicolon 分号
? question mark 问号
! exclamation mark (英式英语) exclamation point (美式英语)
' apostrophe 撇号
- hyphen 连字号
-- dash 破折号
... dots/ ellipsis 省略号
" single quotation marks 单引号
"" double quotation marks 双引号
‖ parallel 双线号
& ampersand = and
~ swung dash 代字号
§ section; division 分节号
→ arrow 箭号;参见号

2007年9月23日星期日

Challenge Cup

西南石油大学共青团工作有声有色
2007-6-15 1:37:29

     四川新闻网-西南商报讯

  一年多来,西南石油大学团委紧密结合共青团和青年工作实际,以学习“三个代表”重要思想、践行社会主义荣辱观为主线,积极引导广大青年学子努力提高自身综合素质、奋发图强,着力于校风学风建设、校园文化引导和团自身建设,取得了较为突出的成绩。该校以保持共产党员先进性教育为契机,着力塑造主流校园文化,构筑全校青年大学生强大精神支柱,教育引导广大共青团员“永远跟党走”,将社会公德教育、荣辱观教育与学校党委提出的“构建和谐校园”的号召结合起来,开展了颇有成效的工作。

  校团委认真抓好舆论宣传工作,扎实推进团建工作,加强基层团组织建设创新。注重团的委员会建设,积极开展团建先进单位创建工作,每年深入开展一次五四红旗团总支和五四红旗团支部的评选工作。他们完善并大力实施大学生素质拓展计划。2006年,校团委在南充、成都两个校区共举办了青春服饰大赛、戏曲舞蹈大赛、歌手大赛、“继承光荣传统永葆党的先进性”一二·九综艺晚会等120余项校级素质拓展活动,活动内容涵盖了青年学生思想政治素质教育、社会实践活动、学术科技与创新创业活动、学生科技素质与文化艺术素质、身心健康发展、学生技能培养,等等。学生参与面广,达到90%以上,证书管理规范,证书发放涵盖了本校毕生生80%以上。团委大力规范素质拓展计划的运行,按照“项目化管理、社会化运作、阵地化依托、网络化认证、制度化保障”的工作思路,进一步完善了大学生素质拓展的运行机制。

  学校积极开展解贫济困助学工作,学校现设有各类奖、助学金27余项,发放奖助学金500多万元,其中2006年通过学校的努力工作,争取到蓝剑集团等5家公司在学校设立企业奖学金,年均总金额50多万元。学校全年提供勤工助学岗位1000多个,发放工资180多万元。团委积极响应上级团组织号召,多形式开展关爱留守学生活动,暑假组织了5支关爱留守学生社会实践团队到达州、南充等地开展服务活动,并于11月份为部分留守学生捐助了大量书籍、衣物,关爱活动收到良好效果。团委注重育人实效,培养大学生的社会实践能力。2006年暑期社会实践以“关爱留守学生,共建和谐社会”为主题。团委组织编写了《大学生暑期社会实践指南》,在全校范围内组织了73余支重点团队参加“三下乡”暑期社会实践活动,在广安和西昌等地建立了7个社会实践基地。社会实践的过程中,受到了社会各界和新闻媒体的充分肯定和热情赞扬。社会实践与学生学分挂钩,学生参与面达到100%。另外,团委积极为大学生就业服务,2006 年就“就业面试技巧”、“择业定位”等主题开展讲座、竞赛活动18次,培训学生3000多人,各院系团总支组织就业经验交流会、就业压力传递座谈会35场次。通过社会实践等形式联系、对接大学生就业见习基地15个,推荐见习学生120多人。

  学校积极开展课外科技活动,努力培养大学生科技创新能力,成果显著。2006年“康菲杯”全校第八届大学生课外科技作品竞赛和第十届“挑战杯” 预选赛,共收到学生课外科技作品350余项。最终评选出了一等奖14项,二等奖24项,三等奖36项。选送12件作品参加第九届“挑战杯”,邓鹏同学的 “数码笔”作品荣获全国第九届“挑战杯”三等奖;李登伟、郭了萍同学的参赛作品“天然气水合物相平衡及其平衡组分的实验研究”荣获四川省第八届“挑战杯” 一等奖,另金发扬、曹建、王生奎三名同学的参赛作品“区块整体调剖智能系统”获得二等奖,唐华、罗韬、常志强等十名同学的参赛作品获得三等奖;学校荣获四川省第八届“挑战杯”大学生课外学术科技作品竞赛“优秀组织奖”称号。

  校团委巩固深化青年志愿者行动,完善志愿者体制,推动志愿者注册工作,拓宽志愿者服务领域,弘扬民族精神。学校的青年志愿者总人数已达6300 余人,注册人数达4500多人,服务面不仅仅涉及到学校的每个院(系)和部门单位,而且还走出校园,将学校青年志愿者的服务热情洒向校外。全年开展社区志愿服务活动78次,建立有较为稳定的服务基地。学校2006年还选送了15名西部计划志愿者,奔赴西部各地投身志愿者服务工作。

  本报记者詹正洪

http://www.newssc.org/gb/Newssc/meiti/xnsb/xf/userobject10ai1254993.html

2007年9月9日星期日

中国式资讯不对称

  只要逛一圈北京国际图书博览会,任何人都能发现如今的中国出版界和二十年前真是大不相同了。从前的翻译书籍不只在种类和数量上无法和今天相比,而且还常在序言里煞有介事地声明一番,说“本书反映了西方资本主义社会中某些人的观点,我们应该站在马克思主义的立场批判地检讨”云云。而现在的翻译书多半已经可以直接跳过这层八股虚文,直接以素颜和读者见面了。对着琳琅满目的译书,你真的很容易生起一种感觉:“中国真的和世界接轨了。”但,这是真的吗?

  今年年初,英国一家出版社推出了一本非常轰动的书,作者是个土生土长的英籍印裔穆斯林。他就是那种近年震撼欧美的“伊斯兰极端分子”典型,明明在英国长大,与同龄的孩子一样唱英国的流行歌曲,受英国的正规教育;偏偏在青年时期突然转向伊斯兰教的基本教义派,满脑子仇恨西方的思想,甚至还做好了执行自杀袭击的准备。这位作者特别的地方是他后来突然痛悟,脱离同伴,回到校园攻读博士,这本书就是他前半生的自传了。此书一出,书评界莫不称善,因为以前还没有人试过从第一身的角度去谈伊斯兰极端分子的心路历程。

  令我惊讶的是,不少内地出版界的资深编辑和大佬似乎都没听过这本书,而当我问他们会不会代理它的中文版权时,答案则是“这要看中国读者的反应了。这种题材,大家多半不感兴趣”。事实上,自从“9·11”发生之后,与伊斯兰题材有关的书籍一直就是全球各地畅销书榜上的常客,其中不乏立论中肯观点独到的好书,但被译成中文的却是凤毛麟角。理由真的就是中国读者不感兴趣吗?还是怕这些书太过敏感,出现了之后会影响“社会的和谐”,“民族间的关系” 呢?

  我并不认为别的地方流行什么书,中国也就一定要赶着把它们译出来。但是,畅销书的确有指标的作用,它可以反映其他地区的人正在关心什么,正在渴望什么,看到这些书,就意味着我们有机会更深入地理解世界上其他国家的民情趋向;理解其他人,我们懂得怎么和他们打交通,形成一个更完备的世界观。

  如果这个例子太不平常,我们还可以看看“维基百科”和“Yontube”这两个热门网站在中国的处境,大家都知道,要在中国境内顺利登录这两个网站并不总是一件容易的事。当外国一个普通小学生都能自由自在地从“维基百科”里找材料做功课的时候,我们的大学生却不能进入这个世界性的平台,这里头的资讯差距岂不是大得太离谱了吗?

  没错,人家有“维基”,我们有“百度”;人家有“Youtube”,我们还有无数的视频网络。凡是外国有什么,我们就能炮制出一个针对中国市场很有中国特色的模本和翻版。可是,在中国独家提供的资讯选择之外,我们就真的不需要去直接接触别人的声音、别人的世界吗?

  这种中国特色的资讯不对称不只使得我们很难和全世界做“同一个梦”,而且还会损及我们在知识经济上和其他人竞争的本钱。“知己知彼,百战百胜”,我们现在面对的情况是,人家要知道我们很容易,我们对人家的认识却总是慢了半拍,缺了一角。

本文摘自《南方都市报》http://www.nanfangdaily.com.cn/southnews/spqy/200709080247.asp

2007年8月31日星期五

c



 
/*
    Skeleton file for 433-677 Project 1
    aharwood, 2007
    Student logins:
*/
 
 
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
char *probname[]={"prefix sum",
     "matrix multiplication",
     "Gaussian elimination",
     "Sieve of Eratosthenes",
     "maximum contiguous sum"};
 
 
/* function to dynamically allocate a matrix of size n*n floats */
float **matrix(int n){
    float **M;
    int i;
 
    M=(float **)malloc(sizeof(float *)*n);
    if(M==NULL){
        printf("failed to allocate matrix rows\n");
        exit(1);
    }
 
    for(i=0;i<n;i++){
        M[i]=(float *)malloc(sizeof(float)*n);
        if(M[i]==NULL){
            printf("failed to allocate matrix columns\n");
            exit(1);
        }
    }
 
    return M;
 
}
 
int main(int argc, char** argv){
    int t;  // problem type
    int n;  // size of the problem
    int P;    // number of threads
    int *ia; // array for ints
    float *fa; // array for floats
    float **A,**B,**C; // matrices
 
 
    int sqrtn; // the square root of n
    int numprimes; // the number of primes <= n
    float m;    // for Guassian elimination
    float max;    // for maximum contiguous sum
    float sum;    // for maximum contiguous sum
    int start,end; // for maximum contiguous sum
    int i,j,k;  // dummy index variables
    
    int psd;
    int psk;
 
    if(argc != 4) {
        printf("usage: proj1 problem_type num_threads problem_size\n");
        printf("problem_type: 1 - prefix sum\n");
        printf("problem_type: 2 - matrix multiplication\n");
        printf("problem_type: 3 - Gaussian elimination\n");
        printf("problem_type: 4 - Sieve of Eratosthenes\n");
        printf("problem_type: 5 - maximum contiguous sum\n");
        exit(1);
    }    
    sscanf(argv[1],"%i",&t);
    sscanf(argv[2],"%i",&P);
    sscanf(argv[3],"%i",&n);        
    
 
    printf("number of processors: %d\n", omp_get_num_procs());
 
    omp_set_num_threads(P);
 
        printf("max threads: %d\n", omp_get_max_threads());
 
    printf("problem: %s\n",probname[t-1]);
    printf("array size %i\n",n);
 
    sqrtn=(int)ceil(sqrt(n));
    
    if(P==1){
        /*************************/
        /* Sequential algorithms */
        /*************************/
        
        
        switch(t){
        case 1:
            /* Initialize the array */
            fa=(float *)malloc(sizeof(float)*n);
            if(fa==NULL){
                printf("failed to allocate array\n");
                exit(1);
            }
            for(i=0;i<n;i++) fa[i]=i;    
 
            /* Compute the prefix sum */
            for(i=1;i<n;i++) fa[i]=fa[i]+fa[i-1];
            
            // uncomment to check
            printf("last value %f\n",fa[n-1]);
            break;
 
        case 2:
            /* Initialize the arrays */
            A=matrix(n);
            B=matrix(n);
            C=matrix(n);
            for(i=0;i<n;i++)
                for(j=0;j<n;j++){
                    A[i][j]=i+j;    // some dummy values
                    B[i][j]=i-j;    // some dummy values
                }
 
            /* Compute the matrix multiplication */
            for(i=0;i<n;i++)
                for(j=0;j<n;j++){
                      C[i][j]=0;
                      for(k=0;k<n;k++)
                        C[i][j]+=A[i][k]*B[k][j];
                }
    
            // uncomment to print answer for small arrays
            //for(i=0;i<n;i++)
            //    for(j=0;j<n;j++)
            //        printf("C[%d][%d]=%f\n",i,j,C[i][j]);
 
            break;
 
        case 3:
            /* Initialize the arrays */
            A=matrix(n);
            fa=(float *)malloc(sizeof(float)*n);
            if(fa==NULL){
                printf("failed to allocate array\n");
                exit(1);
            }
            
            for(i=0;i<n;i++){
                fa[i]=2.0*(1.0+i);    // dummy value
                for(j=0;j<n;j++)
                    A[i][j]=10.0+(i+2.0)/(j+1.0); // dummy value
            }
 
            /* Do Gaussian elimination */
            for(i=0;i<n-1;i++)
                  for(j=i+1;j<n;j++){
                    m=A[j][i]/A[i][i];
                    for(k=i;k<n;k++)
                          A[j][k]=A[j][k]-A[i][k]*m;
                    fa[j]=fa[j]-fa[i]*m;
                  }
 
            // uncomment to print resulting array for small arrays
            //for(i=0;i<n;i++)
                //for(j=0;j<n;j++)
                    //printf("A[%d][%d]=%f\n",i,j,A[i][j]);
 
            break;
 
        case 4:
            /* Initialize the array */
            ia=(int *)malloc(sizeof(int)*n);
            if(ia==NULL){
                printf("failed to allocate array\n");
                exit(1);
            }
            for(i=0;i<n;i++) ia[i]=i;
    
            /* Use the Sieve of Eratosthenes to find prime numbers */
            for(i=2;i<=sqrtn;i++){
                if(ia[i]>0)
                    for(j=i*i;j<n;j+=i)
                        ia[j]=0;
            }        
 
            //Uncomment to print the primes, for small sizes of n only
            //for(i=0;i<n;i++) if(ia[i]>0) printf("%i is a prime\n",ia[i]);
 
            /* Compact the array */
            numprimes=0;
            for(j=0;j<n;j++)
                if(ia[j]>0){
                    ia[numprimes]=ia[j];
                    numprimes++;
                }
            
 
            //Uncomment to print the number of primes
            //printf("%d primes less than or equal to %d\n", numprimes, n);
 
            break;
 
        case 5:
            /* Initialize the array */
            fa=(float *)malloc(sizeof(float)*n);
            if(fa==NULL){
                printf("failed to allocate array\n");
                exit(1);
            }
            srand48(100); // dummy seed value for random numbers
            for(i=0;i<n;i++) fa[i]=drand48()-0.5;
 
 
            /* Find maximum contiguous sum */
            sum=0.0;
            max=0.0;
            start=0;
            end=0;    
            i=0;
            for(j=0;j<n;j++){
                sum+=fa[j];
                if(sum>max){
                    max=sum;
                    start=i;
                    end=j;
                } else if (sum<0.0){
                    i=j+1;
                    sum=0;
                }
            }
        
            //uncomment to print answer    
            //printf("maximum contiguous sum = %f\n",max);
        
            break;        
        }
 
    } else {
        /***********************/
        /* Parallel algorithms */
        /***********************/
        switch(t){
        case 1:    /* Put parallel prefix sum algorithm here */
            /* Initialize the array */
            omp_set_num_threads(P);
            
            //printf("Parallel Prefix Sum\n");
            fa=(float *)malloc(sizeof(float)*n);
            if(fa==NULL){
                printf("failed to allocate array\n");
                exit(1);
            }
            
            /* Some initializations */
            for (i=0; i <n; i++)
                fa[i] = i;
            
            for(psd=0;psd<=(int)log2(n)-1;psd++)
            {
                int var1=(int)pow(2,psd+1);
                #pragma omp parallel for
                //for(psk=0;psk<n-1;psk+=(int)pow(2,psd+1))
                for(psk=0;psk<n-1;psk+=var1)
                {
                    fa[psk+var1-1]=fa[psk+(int)pow(2,psd)-1]+fa[psk+var1-1];
                    //printf("fa[%d]=%f\n",psk+(int)pow(2,psd+1)-1,fa[psk+(int)pow(2,psd+1)-1]);
                }
    
            }
            fa[n-1]=0.0;
            for(psd=(int)log2(n);psd>=0;psd--)
            {
                int var2=(int)pow(2,psd+1);
                int var3=(int)pow(2,psd);
                
                #pragma omp parallel for
                //for(psk=0;psk<n-1;psk+=(int)pow(2,psd+1))
                for(psk=0;psk<n-1;psk+=var2)
                {
                    float t = fa[psk+var3-1];
                    fa[psk+var3-1]=fa[psk+var2-1];
                    fa[psk+var2-1]= t + fa[psk+var2-1];
                    //printf("fa[%d]=%f\n",psk+(int)pow(2,psd)-1,fa[psk+(int)pow(2,psd+1)-1]);
                }
            }
            
            printf("last value %f\n",fa[n-1]);
            
            //for(int jj=0;jj<8;jj++)
            //{
                //printf("fa[%d]=%f\n",jj,fa[jj]);
            //}
            break;
 
        case 2: /* Put parallel matrix multplication algorithm here */
            
            break;
 
        case 3: /* Put parallel Gaussian elimination algorithm here */
            /* Initialize the arrays */
            omp_set_num_threads(P);
            
            A=matrix(n);
            fa=(float *)malloc(sizeof(float)*n);
            if(fa==NULL){
                printf("failed to allocate array\n");
                exit(1);
            }
            
            for(i=0;i<n;i++){
                fa[i]=2.0*(1.0+i);    // dummy value
                for(j=0;j<n;j++)
                    A[i][j]=10.0+(i+2.0)/(j+1.0); // dummy value
            }
 
            /* Do Gaussian elimination */
            for(i=0;i<n-1;i++)
                #pragma omp parallel for private(j,k,m)
                  for(j=i+1;j<n;j++){
                    m=A[j][i]/A[i][i];
                    //#pragma omp parallel for
                    for(k=i;k<n;k++)
                          A[j][k]=A[j][k]-A[i][k]*m;
                    fa[j]=fa[j]-fa[i]*m;
                  }
 
            // uncomment to print resulting array for small arrays
            //for(i=0;i<n;i++)
                //for(j=0;j<n;j++)
                    //printf("A[%d][%d]=%f\n",i,j,A[i][j]);
 
            break;
 
        case 4: /* Put parallel Sieve of Eratosthenes algoritm here */
 
            break;
        
        case 5: /* Put parallel maximum contiguous sum algorithm here */
 
            break;
        }
 
    }
 
    exit(0);
}
 
v