/* * DA-IICT * Author: Jugal Kalal */ import java.util.*; import java.io.*; import java.math.*; public class Main{ static long mod=(long)(Math.pow(10,9))+7l; public static void main(String args[]){ new Thread(null, new Runnable() { public void run() { try{ solve(); w.close(); } catch(Exception e){ e.printStackTrace(); } } }, "1", 1 << 26).start(); } static InputReader in = new InputReader(System.in); static PrintWriter w = new PrintWriter(System.out); public static void solve(){ int n=in.nextInt(); long ans=0; for(int i=0;i primes=factors(num); // w.print(primes); ans+=1; if(num==1) { continue; } long com=1; for(Map.Entry entry:primes.entrySet()) { for(int j=0;j factors(long n){ TreeMap map=new TreeMap<>(Collections.reverseOrder()); // Print the number of 2s that divide n while (n%2==0){ if(!map.containsKey(2l)) { map.put(2l, 1l); }else { map.put(2l,1+map.get(2l)); } n /= 2l; } // n must be odd at this point. So we can // skip one element (Note i = i +2) for (long i = 3; i <= Math.sqrt(n); i+= 2){ // While i divides n, print i and divide n while (n%i == 0){ if(!map.containsKey(i)) { map.put(i, 1l); }else { map.put(i,1+map.get(i)); } n /= i; } } // This condition is to handle the case whien // n is a prime number greater than 2 if (n > 2) { if(!map.containsKey(n)) { map.put(n, 1l); }else { map.put(n,1+map.get(n)); } } return map; } static class Pair{ int parent; int type; public Pair(int parent,int type) { this.parent=parent; this.type=type; } } static class Triple{ int f; int s; int t; public Triple(int f,int s,int t) { this.f=f; this.s=s; this.t=t; } } static boolean isPalindrome(String str) { int l=0,r=str.length()-1; while(l adj[]; //Adjacency Lists // Constructor static void Graph(int v){ adj = new HashSet[v]; for (int i=0; i0){ // s+=1+Math.log(temp&(-temp))/Math.log(2); // temp=temp&(temp-1); // count++; // } // for(int j=0;j0){ // for(int k=0;k0&&adj[j][k]&&dp[k][mask^(1< 0) { if (exponent % 2L == 1L) result = (result * base) % modulus; exponent = exponent >> 1; base = (base * base) % modulus; } return result; } static HashMap primeFactors(long n){ HashMap ans=new HashMap(); // Print the number of 2s that divide n while (n%2L==0L) { if(ans.containsKey(2L)){ ans.put(2L,ans.get(2L)+1L); }else{ ans.put(2L,1L); } n /= 2L; } // n must be odd at this point. So we can // skip one element (Note i = i +2) for (long i = 3; i <= Math.sqrt(n); i+= 2L) { // While i divides n, print i and divide n while (n%i == 0) { if(ans.containsKey(i)){ ans.put(i,ans.get(i)+1L); }else{ ans.put(i,1L); } n /= i; } } // This condition is to handle the case whien // n is a prime number greater than 2 if (n > 2) ans.put(n,1L); return ans; } ////for marking all prime numbers greater than 1 and less than equal to N // //if str2 (pattern) is subsequence of str1 (Text) or not // static boolean function(String str1,String str2){ // str2 = str2.replace("", ".*"); //returns .*a.*n.*n.*a. // return (str1.matches(str2)); // returns true // } static boolean isPrime(long n){ if(n < 2L) return false; if(n == 2L || n == 3L) return true; if(n%2L == 0 || n%3L == 0) return false; long sqrtN = (long)Math.sqrt(n)+1L; for(long i = 6L; i <= sqrtN; i += 6L) { if(n%(i-1) == 0 || n%(i+1) == 0) return false; } return true; } // static HashMap level;; // static HashMap parent; // static boolean T[][][]; // static void subsetSum(int input[], int total, int count) { // T = new boolean[input.length + 1][total + 1][count+1]; // for (int i = 0; i <= input.length; i++) { // T[i][0][0] = true; // for(int j = 1; j<=count; j++){ // T[i][0][j] = false; // } // } // int sum[]=new int[input.length+1]; // for(int i=1;i<=input.length;i++){ // sum[i]=sum[i-1]+input[i-1]; // } // for (int i = 1; i <= input.length; i++) { // for (int j = 1; j <= (int)Math.min(total,sum[i]); j++) { // for (int k = 1; k <= (int)Math.min(i,count); k++){ // if (j >= input[i - 1]) {//Exclude and Include // T[i][j][k] = T[i - 1][j][k] || T[i - 1][j - input[i - 1]][k-1]; // } else { // T[i][j][k] = T[i-1][j][k]; // } // } // } // } // } // static > // SortedSet> entriesSortedByValues(Map map){ // SortedSet> sortedEntries = new TreeSet>( // new Comparator>() { // @Override public int compare(Map.Entry e1, Map.Entry e2) { // int res = e2.getValue().compareTo(e1.getValue()); // return res != 0 ? res : 1; // } // } // ); // sortedEntries.addAll(map.entrySet()); // return sortedEntries; // } //minimum prime factor of all the numbers less than n static int minPrime[]; static void minimumPrime(int n){ minPrime=new int[n+1]; minPrime[1]=1; for (int i = 2; i * i <= n; ++i) { if (minPrime[i] == 0) { //If i is prime for (int j = i * i; j <= n; j += i) { if (minPrime[j] == 0) { minPrime[j] = i; } } } } for (int i = 2; i <= n; ++i) { if (minPrime[i] == 0) { minPrime[i] = i; } } } static long modInverse(long A, long M){ long x=extendedEuclid(A,M)[0]; return (x%M+M)%M; //x may be negative } static long[] extendedEuclid(long A, long B){ if(B == 0) { long d = A; long x = 1; long y = 0; return new long[]{x,y,d}; } else { long arr[]=extendedEuclid(B, A%B); long temp = arr[0]; arr[0] = arr[1]; arr[1] = temp - (A/B)*arr[1]; return arr; } } static class InputReader{ private final InputStream stream; private final byte[] buf = new byte[8192]; private int curChar, numChars; private SpaceCharFilter filter; public InputReader(InputStream stream){ this.stream = stream; } public int read(){ if (numChars == -1) { throw new InputMismatchException(); } if (curChar >= numChars) { curChar = 0; try { numChars = stream.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if (numChars <= 0) { return -1; } } return buf[curChar++]; } public String nextLine(){ int c = read(); while (isSpaceChar(c)) { c = read(); } StringBuilder res = new StringBuilder(); do { res.appendCodePoint(c); c = read(); } while (!isEndOfLine(c)); return res.toString(); } public String readString(){ int c = read(); while (isSpaceChar(c)) { c = read(); } StringBuilder res = new StringBuilder(); do { res.appendCodePoint(c); c = read(); } while (!isSpaceChar(c)); return res.toString(); } public long nextLong(){ int c = read(); while (isSpaceChar(c)) { c = read(); } int sgn = 1; if (c == '-') { sgn = -1; c = read(); } long res = 0; do { if (c < '0' || c > '9') { throw new InputMismatchException(); } res *= 10; res += c - '0'; c = read(); } while (!isSpaceChar(c)); return res * sgn; } public int nextInt(){ int c = read(); while (isSpaceChar(c)) { c = read(); } int sgn = 1; if (c == '-') { sgn = -1; c = read(); } int res = 0; do { if (c < '0' || c > '9') { throw new InputMismatchException(); } res *= 10; res += c - '0'; c = read(); } while (!isSpaceChar(c)); return res * sgn; } public int[] nextIntArray(int n){ int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = nextInt(); } return arr; } public long[] nextLongArray(int n){ long[] arr = new long[n]; for (int i = 0; i < n; i++) { arr[i] = nextLong(); } return arr; } public boolean isSpaceChar(int c){ if (filter != null) return filter.isSpaceChar(c); return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } private boolean isEndOfLine(int c){ return c == '\n' || c == '\r' || c == -1; } public interface SpaceCharFilter{ public boolean isSpaceChar(int ch); } } }