//打印1-100中奇数的个数
//打印1-100中所有7的倍数的整数及总和
public static void odd()
{
int n=0,sum=0;
for (int i = 1; i < 100; i++) {
if (i %2!=0)
{
n++;
}
}
System.out.println("1-100中有"+n+"个奇数");
for (int i = 1; i < 100; i++) {
if (i %7==0) {
sum+=i;
System.out.println(i+"是7的倍数");
}
}
System.out.println("100以内7的倍数总和为"+sum);
}
//打印所有的水仙花数
public static void Narcissistic_number()
{
int first=0,second=0,third=0;
for (int i = 1; i < 1000; i++)
{
first=i/100;
second=i%100/10;
third=i%10;
if(i==first*first*first+second*second*second+third*third*third)
System.out.println("水仙花数:"+i);
}
}
//普通筛法
public static void sieve()
{
long startTime = System.nanoTime(); //获取开始时间
int num[]=new int[101];
num[2]=0;
int t=3;
for (int i = 3; i <num.length ; i++) {
num[i] = 0;
}
while (t<101)
{
for (int i = 2; i <(int)Math.sqrt(t)+1; i++)
{
if (t%i==0) {
num[t]=1;
break;
}
}
t++;
}
for (int i = 2; i <num.length; i++) {
if(num[i]==0)
System.out.println(i);
}
long endTime = System.nanoTime(); //获取结束时间
System.out.print(endTime-startTime);
}
//艾拉托斯特尼筛法
public static void Eratosthenes()
{
long startTime = System.nanoTime(); //获取开始时间
int num[]=new int[101];
num[2]=0;
int k=2,tt=0;
while (tt<101)
{
for (int i = 1; i <num.length ; i++) {
if (i % k == 0 && i != k)
num[i] = 1;
}
for(int i=1;i<num.length;i++) {
if (i>k&&num[i]==0)
{
k=i;
break;
}
}
tt++;
}
for (int i = 1; i < num.length; i++) {
if(num[i]==0)
System.out.println(i);
}
long endTime = System.nanoTime(); //获取结束时间
System.out.print(endTime-startTime);
}
姑且是比较了一下两种筛法,艾氏筛法是参考百度百科中的Java写的,跑了20次运行时间均在1000000到2000000ns之间,大部分情况下在100到140万这个区间内。经典的筛法在70到800万的区间内都有出现,大部分情况下在70万到120万之间.我觉得大概是百度百科的程序结构不够好,还可以再改改。
本文通过具体Java代码展示了如何计算1-100中奇数的数量,列出所有7的倍数并计算其总和,寻找1000以内的水仙花数,以及使用普通筛法和艾拉托斯特尼筛法寻找100以内的素数,对比了两种筛法的效率。
1194

被折叠的 条评论
为什么被折叠?



