Showing posts with label UVA Problems. Show all posts
Showing posts with label UVA Problems. Show all posts

Friday, March 11, 2016

UVA 884-Factorial Factor

প্রব্লেমঃ যেকোন কম্পোজিট নাম্বারকে এক বা একাধিক প্রাইম নাম্বারের গুনফল আকারে প্রকাশ করা যায় । যেমন
৪= ২*২ (২ টি প্রাইম)
৬= ২*৩  (২ টি প্রাইম)
৮= ২*২*২ (৩ টি প্রাইম)
একটি নাম্বার দেওয়া থাকবে সে নাম্বারের ফ্যাক্টোরিয়ালের এরকম মোট কতটি প্রাইম দ্বারা প্রকাশ করা যেতে পারে তা বের করতে হবে।
যেমন, ৮! = ১*২*৩*৪*৫*৬*৭*৮
               = ১*২*৩*২*২*৫*২*৩*২*২*২ (১১ টি)

প্রব্লেম হিন্টঃ প্রথমে প্রতিটি নাম্বারের প্রাইম ফ্যাক্টর বের করতে হবে। সর্বোচ্চ ভেলু যেহেতু ১০০০০০০  তাই সেক্ষেত্রে ভুলেও সাধারনভাবে ফ্যাক্টর বের করা যাবেনা। তারপর ফ্যাক্টোরিয়াল মানগুলো যোগ করা ওই পজিশনে বসিয়ে রাখতে হবে এবং প্রিন্ট করে দিলেই কাজ শেষ।

কোডঃ

 #include <bits/stdc++.h>  
 #include <cstdio>  
 #define MAX 1000001  
 using namespace std;  
 int factors[MAX];  
 int factorialcount[MAX];  
 int x, temp;  


 int primeFactor(int x)  
 {  
   int count = 0;  
   int i,j;  
     for(j=2;j*j<=x;j++)  
     {  
       if(x%j == 0)  
       {  
         count++;  
         x= x/j;  
         j= 1;  
       }  
     }  
     if(x>1)  
       count++;  
   return count;  
   }  


 int main()  
 {  
   int n, i, sum;  
   factors[1] = 0;  
 for(i= 2;i<MAX;i++)  
   factorialcount[i] = factorialcount[i-1]+ primeFactor(i);  

   while(scanf("%d", &n)!= EOF)  
   {  
     printf("%d\n",factorialcount[n]);  
   }  
   return 0;  
 }  

Monday, February 22, 2016

UVA 10038 - Jolly Jumpers

প্রব্লেমঃ N সংখ্যক ইন্টেজার সিকুয়েন্স দেওয়া আছে। বের করতে হবে সিকিউয়েন্সটি Jolly বা Jolly নয় কিনা। যদি সিকিউয়েন্সটির প্রতিটি এলিমেন্ট এর পার্থক্য বের করলে N থেকে N-1 পর্যন্ত সবগুলো নাম্বার  পাওয়া যায় তখন তা Jolly নাম্বার অন্যথায় Jolly নাম্বার নয়।

এক্সাম্পল্ঃ প্রথম টেস্ট কেসে N= 4 এবং 4 টা ইন্টেজার সিকিউয়েন্স দেওয়া আছে এদের পার্থক্য যথাক্রমে 3 2 1 , যেহেতু এটি N থেকে N-1 পর্যন্ত সবগুলো সংখ্য আছে সেহেতু এটি একটি Jolly নাম্বার।

প্রথমে নিজে চেষ্টা কর তারপর  কোড দেখো।

কোডঃ

 #include <bits/stdc++.h>  
 #include <stdio.h>  
 #include <math.h>  
 using namespace std; 

 int main(){  
   int n, diff, i, j;  
   int numbers[3001];  
   bool check[3001];  

   while(scanf("%d",&n)!=EOF)  
   {  
     for(j= 0;j<n;j++)  
       check[j] = false;  
     int flag =0;  
     for(i= 0;i<n;i++)  
       scanf("%d",&numbers[i]);  
     for(i= 0;i<n-1;i++)  
     {  
       diff = numbers[i+1]-numbers[i];  
       diff = abs(diff);  
       check[diff] = true;  
     }  

     for(i= 1;i<n;i++)  
     {  
       if(check[i] == false)  
       {  
          flag =1;  
          break;  
       }  
     }  

     if(flag == 0)  
       printf("Jolly\n");  
     else  
       printf("Not jolly\n");  
   }  
  return 0;  
 }