一、完全数
暴力写法,从1到a遍历查找
for(int i = 1; i < a; i ++)
{
if(a % i == 0) sum += i;
}
缩短时间的写法
for(int i = 1; i * i <= a; i ++)
if(a % i == 0)
{
sum += i;
if(i != a / i) sum += a / i;
}
常见的完全数有6, 28, 496, 8128, 33550336, 所以也可以直接判断>.<(Java版)
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int x,n=sc.nextInt();
for(int i=1;i<=n;i++)
{
x=sc.nextInt();
if(x==6||x==28||x==496||x==8128||x==33550336) System.out.printf("%d is perfect\n",x);
else System.out.printf("%d is not perfect\n",x);
}
}
}
完整代码C++
#include<iostream>
using namespace std;
int main()
{
int n, a;
cin >> n;
while(n --)
{
cin >> a;
int sum = -a;
for(int i = 1; i * i <= a; i ++)
if(a % i == 0)
{
sum += i;
if(i != a / i) sum += a / i;
}
cout << a << (sum == a ? " is perfect" : " is not perfect") << endl;
}
return 0;
}
Java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();//输入测试用例的个数
while(x -- > 0)
{
int a = sc.nextInt(), sum = -a;
for(int i = 1; i * i <= a; i ++)
if(a % i == 0)
{
sum += i;
if(i != a / i) sum += a / i;
}
System.out.println(sum == a ? a + " is perfect" : a + " is not perfect");//判断是否是完全数
}
}
}
二、质数
判断一个数是否是质数和完全数类似
C++代码
#include<iostream>
using namespace std;
int main()
{
int n, x, flag;
cin >> n;
while(n -- > 0)
{
flag = 1;//设立flag作为是否是质数的标志
cin >> x;
for(int i = 2; i * i <= x; i ++)
{
if(x % i == 0)
{
flag = 0;//flag为假,不是质数
break;
}
}
cout << x << (flag == 1 ? " is prime" : " is not prime") << endl;
}
return 0;
}
Java代码
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while(n -- > 0)
{
int x = sc.nextInt(), flag = 1;//设立flag作为是否是质数的标志
for(int i = 2; i * i <= x; i ++)
{
if(x % i == 0)
{
flag = 0;//flag为假,不是质数
break;
}
}
System.out.println(flag == 1 ? x + " is prime" : x + " is not prime");
}
}
}
三、菱形
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int h = sc.nextInt(), i, j;
for(i = 1; i <= h; i ++)
{
if(i <= h / 2 + 1)
{
for(j = 1; j <= h / 2 + 1 - i; j ++)
System.out.printf(" ");
for(j = 1; j <= 2 * i - 1; j ++)
System.out.printf("*");
System.out.println();
}
else
{
for(j = 1; j <= i - h / 2 - 1; j ++)
System.out.printf(" ");
for(j = 1; j <= 2 * h - 2 * i + 1; j ++)
System.out.printf("*");
System.out.println();
}
}
}
}
升级以后
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int cx = n / 2, cy = n / 2;
for (int i = 0; i < n; i ++ ) {
for (int j = 0; j < n; j ++ ) {
int d = Math.abs(i - cx) + Math.abs(j - cy);
if (d <= n / 2)
System.out.printf("*");
else
System.out.printf(" ");
}
System.out.println();
}
}
}