问题描述
在诗人的眼中,数字是生活的韵律,也是诗意的表达。
小蓝,当代顶级诗人与数学家,被赋予了"数学诗人"的美誉。他擅长将冰冷的数字与抽象的诗意相融合,并用优雅的文字将数学之美展现于纸上。
某日,小蓝静坐书桌前,目光所及,展现着 n 个数字,它们依次为 a1,a2,…,an,熠熠生辉。小蓝悟到,如果一个数能够以若干个(至少两个)连续的正整数相加表示,那么它就蕴含诗意。例如,数字 6 就蕴含诗意,因为它可以表示为 1+2+3。而 8 则缺乏诗意,因为它无法用连续的正整数相加表示。
小蓝希望他面前的所有数字都蕴含诗意,为此,他决定从这 n 个数字中删除一部分。请问,小蓝需要删除多少个数字,才能使剩下的数字全部蕴含诗意?
输入格式
第一行包含一个整数 n,表示展示的数字个数。
第二行包含 n 个整数 a1,a2,…,an,表示展示的数字。
输出格式
输出一个整数,表示小蓝需要删除的数字个数,以使剩下的数字全部蕴含诗意。
样例输入
3 3 6 8
样例输出
1
样例说明
在样例中,数字 3 可以表示为 1+2,数字 6 可以表示为 1+2+3,数字 8 无法表示为连续的正整数相加,因此,需要删除的数字个数为 1。
评测用例规模与约定
对于 30% 的评测用例,1≤n≤10^3,1≤ai≤10^3。
对于所有评测用例,1≤n≤2×10^5,1≤ai≤10^16。
思路
如果是奇数,肯定蕴含诗意;
如果是偶数,如果一直除2,且结果>1,再模2的余数为1,就是有诗意的。比如6/2=3,3%2=1;但是8就不行,8/2=4,4/2=2,2/2=1就不是大于1。
代码
java">package 蓝桥;
import java.util.Scanner;
/*** @Auther:hsy* @Date: 2025-03-14 23:47* @Blog:https://blog.csdn.net/hsyhcr?spm=1000.2115.3001.5343* @Description:*/
public class 数字诗意 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();long []a = new long[n];long cnt = 0;for(int i = 0;i < n;i ++) {a[i] = sc.nextLong();while (a[i] % 2 == 0 && a[i] > 1) {a[i] /= 2;}if (a[i] == 1) {cnt ++;}}System.out.println(cnt);}
}