int i, j, sum; for (i = 2; i < 5000; i++) { sum = 0; for (j = 1; j <= i / 2; j++) { if (i % j == 0) sum = sum + j; } if (sum == i) Console.WriteLine(sum); }
for (int i = 2; i <= 5000; i++) { for (int j = 1; j < i; j++) { int sum = 0; if (i % j == 0) { sum = j + sum; if (sum > i) break; } } if (sum == i) { Response.Write(i + "</br>"); } } 这个和他的差不多,可以在网页上输出
传入的是最小值和最大值,一个范围,返回你所需要的数据,看看这个行不行!! class Program { static void Main() { int[] resultList = GetPerfectNum(2, 50000); for (int i = 0; i < resultList.Length; ++i) { Console.WriteLine(resultList[i]); } Console.WriteLine("Analyzer over"); Console.ReadKey(); } static int[] GetPerfectNum(int min, int max) { List<int> resultList = new List<int>() ; for (int i = min; i <= max; ++i) { int sum = 1 ; for (int j = 2; j <= Math.Sqrt(i); ++j) { if (i % j == 0) { if (i / j != j) { sum += j; sum += i / j; } else sum += j; } } if (sum == i) resultList.Add(i); } return resultList.ToArray(); } }
现在好了,刚才我加了Console.ReadLine()..
那人可真有意思,我是来CSDN和你们学习来了,他可倒好,我不仅默默的伸出了中指
import java.util.ArrayList; import java.util.List;public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<Integer> answer = new ArrayList<Integer>(); for (int max = 10000; max > 1; max--) { int temp[] = new int[max]; int index = 0; int result = 0; for (int i = 1; i < max; i++) { int c = max % i; if (c == 0) { temp[index] = i; index++; // System.out.println(i); } } for (int i = 0; i < temp.length; i++) { result = result + temp[i]; } if (result == max) { answer.add(max); } // System.out.println("---------------------------------"); } for (int i = 0; i < answer.size(); i++) { int num = answer.get(i); System.out.println(num); } }}
第二步循环(for (j = 1; j <= i / 2; j++))的时候,可以只需要判断到 j <= sqrt(i), 相应的改为: for (j = 1; j <= sqrt(i); j++) { if (i % j == 0) sum = sum + j + (i/j); } 这样效率能高些
上面写的还有些问题,当 j=1 时,不用去多加(i/j) 可以做一个判断, 或者,初始时 sum = 1 然后写成 for (j = 2; j <= sqrt(i); j++)后面不变。
int i, j, sum;
for (i = 2; i < 5000; i++)
{
sum = 0;
for (j = 1; j <= i / 2; j++)
{
if (i % j == 0)
sum = sum + j;
}
if (sum == i)
Console.WriteLine(sum);
}
{
for (int j = 1; j < i; j++)
{
int sum = 0;
if (i % j == 0)
{
sum = j + sum;
if (sum > i) break;
}
}
if (sum == i) { Response.Write(i + "</br>"); }
}
这个和他的差不多,可以在网页上输出
传入的是最小值和最大值,一个范围,返回你所需要的数据,看看这个行不行!!
class Program
{
static void Main()
{
int[] resultList = GetPerfectNum(2, 50000);
for (int i = 0; i < resultList.Length; ++i)
{
Console.WriteLine(resultList[i]);
}
Console.WriteLine("Analyzer over");
Console.ReadKey();
} static int[] GetPerfectNum(int min, int max)
{
List<int> resultList = new List<int>() ;
for (int i = min; i <= max; ++i)
{
int sum = 1 ;
for (int j = 2; j <= Math.Sqrt(i); ++j)
{
if (i % j == 0)
{
if (i / j != j)
{
sum += j;
sum += i / j;
}
else
sum += j;
}
}
if (sum == i)
resultList.Add(i);
}
return resultList.ToArray();
}
}
现在好了,刚才我加了Console.ReadLine()..
那人可真有意思,我是来CSDN和你们学习来了,他可倒好,我不仅默默的伸出了中指
import java.util.ArrayList;
import java.util.List;public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> answer = new ArrayList<Integer>(); for (int max = 10000; max > 1; max--) {
int temp[] = new int[max];
int index = 0;
int result = 0;
for (int i = 1; i < max; i++) {
int c = max % i;
if (c == 0) {
temp[index] = i;
index++;
// System.out.println(i);
} }
for (int i = 0; i < temp.length; i++) {
result = result + temp[i];
}
if (result == max) {
answer.add(max);
}
// System.out.println("---------------------------------");
} for (int i = 0; i < answer.size(); i++) {
int num = answer.get(i);
System.out.println(num);
}
}}
第二步循环(for (j = 1; j <= i / 2; j++))的时候,可以只需要判断到 j <= sqrt(i),
相应的改为:
for (j = 1; j <= sqrt(i); j++)
{
if (i % j == 0)
sum = sum + j + (i/j);
}
这样效率能高些
可以做一个判断,
或者,初始时 sum = 1 然后写成 for (j = 2; j <= sqrt(i); j++)后面不变。