目录
第一题:质因数个数
问题描述
给定正整数 n, 请问有多少个质数是 n 的约数。
输入格式
输入的第一行包含一个整数 n 。
输出格式
输出一个整数, 表示 n 的质数约数个数。
样例输入
396
样例输出
3
样例说明
396 有 2,3,112,3,11 三个质数约数。
题目分析
//不需要遍历到n,任何一个数,它的质因子大于根号n的要么没有,要么只有一个 //对于正整数 N 来说,它的任意一个因数 T 都是它质因数的乘积 //但是要注意一个问题,比如说 求6得质因子个数,当i*i<=6时结束循环,此时i一定是小于3的,按照我们的分析 6应该包含2个质因子(2和3), //所以当循环完毕时,要判断一下 n此时的值,若为1 说明已经把质因数找完,若不为1,那么剩下的一定是个质数
题目代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextLong(); int ans = 0; //不需要遍历到n,任何一个数,它的质因子大于根号n的要么没有,要么只有一个 //对于正整数 N 来说,它的任意一个因数 T 都是它质因数的乘积 //但是要注意一个问题,比如说 求6得质因子个数,当i*i<=6时结束循环,此时i一定是小于3的,按照我们的分析 6应该包含2个质因子(2和3), //所以当循环完毕时,要判断一下 n此时的值,若为1 说明已经把质因数找完,若不为1,那么剩下的一定是个质数 for (int i = 2; i < Math.sqrt(n); i++) { if(n%i == 0) { ans++; } while(n%i==0) { n = n/i; } } if (n > 1) ans++; System.out.println(ans); } }
第二题:三羊献瑞
题目描述
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
题目分析
暴力fori 要注意循环条件
题目代码
public class 三羊辉瑞 { public static void main(String[] args) { int a,b,c,d,e,f,x; int sum1,sum2,sum; boolean flag=false; for(a=0; a<10; a++) { for(b=0; b<10; b++) { for(c=0; c<10; c++) { for(d=0; d<10; d++) { for(e=0; e<10; e++) { for(f=0; f<10; f++) { for(x=0; x<10; x++) { if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=x&&b!=c&&b!=d&&b!=e&&b!=f&&b!=x&&c!=d&&c!=e&&c!=f&&c!=x&&d!=e&&d!=f&&d!=x&&e!=f&&e!=x&&f!=x) { if(a!=1&&b!=1&&c!=1&&d!=1&&e!=1&&f!=1&&x!=1) { sum1=a*1000+b*100+c*10+d; sum2=1000+e*100+f*10+b; sum=10000+e*1000+c*100+b*10+x; if((sum1+sum2)==sum) { System.out.println(sum2); flag=true; break; } } } } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; } } }
第三题: 加法变乘法
题目描述
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:
1+2+3+…+10*11+12+…+27*28+29+…+49 = 2015
就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
题目思路
我们可以假设靠前乘号的左边数字为a, 则右边的数字为a+1,靠后乘号的左边的数字为b,则乘号右边的数字为b+1。
所以算式可改写为:
1+2+3+...+a+(a+1)+(a+2)+...+b+(b+1)+...+49=1225 (1)
1+2+3+...+a*(a+1)+(a+2)+...+b*(b+1)+...+49=2015 (2)
(2)-(1)=a*(a+1)+b*(b+1)-a-(a+1)-b-(b+1)=2015-1225=790
所以原问题变成了在 1-49之间找两对相邻的数字,且它们的乘积之和减去四个数字之和的差为790
原文链接:https://blog.csdn.net/just16cz/article/details/84198038
题目代码
public class 加法变乘法 { public static void main(String[] args) { int a,b,c,d; for(int i=1;i<=49;i++) { a=i; b=i+1; for(int j=i+2;j<=49;j++) { c=j; d=j+1; if(a*b+c*d-(a+b)-(c+d)==790&&a!=10) { System.out.println(a); break; } } } } }