演算法訓練 素因子去重
問題描述
給定一個正整數n,求一個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1
輸入格式
一個整數,表示n
輸出格式
輸出一行,包含一個整數p。
樣例輸入
1000
樣例輸出
10
資料規模和約定
n<=10^12
樣例解釋:n=1000=2^3*5^3,p=2*5=10
解題思路
在忽略資料規模的情況下,我的想法是先求出n的所有素因子,然後將素因子相乘。在考慮資料規模的情況下,我們需要考慮1e12這個資料規模,我曾經想過使用陣列存放素因子,但是在這個大規模下,機器記憶體佔用太大,無法通過測試用例。百思不得其解的時候,我在網上看到了
向大佬致敬。
下面貼出我的第一版實現和最後一版實現,中間有好幾版,但不具有代表性,故不記錄。
程式碼實現-第一版
#include <stdio.h> #include <stdlib.h> #include <math.h> int isPrime(int number); int main(int argc, char *argv[]) { int number = 0, i; int sum = 1; scanf("%d", &number); for (i = 2; i < number; i++) { if ( number % i ==0 && isPrime(i)) { sum *= i; } } printf("%d\n", sum); return 0; } int isPrime(int number) { int i; for (i = 2; i <= sqrt(number); i++) { if (number % i == 0) { return 0; } } return 1; }
程式碼實現-最終版
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
long long number, sum = 1, i;
scanf("%lld", &number);
for (i = 2; i <= number; i++) {
if ( number % i ==0) {
sum *= i;
while( number % i == 0 ) {
number /= i;
}
}
}
printf("%lld\n", sum);
return 0;
}
評測結果
相關推薦
演算法訓練 素因子去重
開發十年,就只剩下這套架構體系了! >>>
藍橋杯算法訓練 素因子去重
ring n) \n pan while pre ble class 直接 原題鏈接: http://lx.lanqiao.cn/problem.page?gpid=T513題目意思是找到n的所有素因子,再把這些素因子相乘1000 = 2*2*2*5*5*5 p = 2
【藍橋杯】算法訓練 素因子去重
6.0 == argc 兩個 時間 直接 .html html urn 算法訓練 素因子去重 時間限制:1.0s 內存限制:256.0MB 問題描述 給定一個正整數n,求一個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1 輸
藍橋杯 ALGO-39 演算法訓練 陣列排序去重
演算法訓練 陣列排序去重 時間限制:1.0s 記憶體限制:512.0MB 問題描述 輸入10個整陣列成的序列,要求對其進行升序排序,並去掉重複元素。 輸入格式 1
[Java] 藍橋杯ALGO-39 演算法訓練 陣列排序去重
問題描述輸入10個整陣列成的序列,要求對其進行升序排序,並去掉重複元素。輸入格式10個整數。輸出格式多行輸出,每行一個元素。樣例輸入2 2 3 3 1 1 5 5 5 5樣例輸出1235 packag
演算法--全排列,去重全排列以及非遞迴實現
問題1: 給定字串1234無重複字元,求其所有排列 遞迴方式求解: def swap(num, i, j): tmp = num[i] num[i] = num[j] num[j] = tmp #num無重複數字 def fullSort(num, index)
ALGO-39_藍橋杯_算法訓練_數組排序去重
define for stdio.h main 描述 AR 訓練 組成 思路 問題描述 輸入10個整數組成的序列,要求對其進行升序排序,並去掉重復元素。 輸入格式 10個整數。 輸出格式 多行輸出,每行一個元素。 樣例輸入 2 2 3 3 1 1 5 5 5
大量資料去重:Bitmap點陣圖演算法和布隆過濾器(Bloom Filter)
Bitmap演算法 與其說是演算法,不如說是一種緊湊的資料儲存結構。是用記憶體中連續的二進位制位(bit),用於對大量整型資料做去重和查詢。其實如果並非如此大量的資料,有很多排重方案可以使用,典型的就是雜湊表。 實際上,雜湊表為每一個可能出現的數字提供了一個一一對映的關係,每個元素都相當於有
資料結構演算法題/陣列去重
package com.lee.wait; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * ArrayUniue 陣列去重的問題 */ public clas
去重演算法-hash-set
Well, as Bavarious pointed out in a comment, Apple's actual CoreFoundation source is open and available for your perusal too. NSSet is
javascript array js 快取演算法,陣列去重、陣列隨機抽取、字母串轉數字,數字轉字串
前言 因為平時在寫程式碼的過程中,有些演算法會經常重複寫,比如陣列去重、陣列抽取隨機值等!雖然這些不是很難的邏輯,但是每次剛開始遇到需求的時候,還是需要琢磨一些時間才能想出來,所以此文件把這些常見演算法的思想記錄下來,以便下次再遇到的時候不會手腳無措了! 這篇文件不考慮es6等
JavaScript陣列去重演算法例項
本文主要介紹了JavaScript陣列去重演算法,結合例項形式總結分析了JavaScript陣列去重相關的讀寫、遍歷、比較、排序等操作及演算法改進相關實現技巧,需要的朋友可以參考下 測試用例: arr = ["1",3,"1",1,4,5,1,"2",5,1,
W3Cschool高階指令碼演算法(5.排列組合去重演算法挑戰)
排列組合去重演算法挑戰 問題: 把一個字串中的字元重新排列生成新的字串,返回新生成的字串裡沒有連續重複字元的字串個數.連續重複只以單個字元為準 例如, aab 應該返回 2 因為它總共有6中排列 (aab, aab, aba, aba, baa, baa), 但是隻有兩
關於URL去重-MD5演算法步驟
URL去重-MD5演算法學習筆記 URL去重-MD5演算法學習筆記 在網路爬蟲過程中,會爬取到很多相同的url,這個時候就需要我們去掉重複的URL。關於URL去重的演算法有很多,剛剛學習了MD5演算法。MD5演算法是基於Hash的演算法。所以首先說說Hash演算法。 Hash演算
js中陣列常用邏輯演算法(從大到小,從小到大排序,去重等問題)
從小到大: // 從小到大順序排序 minSort (arr) { var min for (var i = 0; i < arr.length; i++) { for (var j = i; j < arr.le
演算法之去重
1 先排序後去重 <script type="text/javascript"> arry=[0,3,2,4,2,6,8,3,2,1]; list= method4 (); function method4 (){ //將陣列進行排序
【應用演算法】資訊流-推薦系統的去重策略
聊兩個問題,它們看似和推薦系統沒有必然關係,但實際上, 在你構建自己的推薦系統的時候,不可避免地會遇到這兩個問題。 去重是剛需 在推薦系統中,有一個剛需就是去重,那麼說在哪些地方有去重的需求呢? 主要是在兩個地方:一個是內容源去重,另一個是不重複給使用者推薦。
文件去重演算法:SimHash和MinHash
來源:http://grunt1223.iteye.com/blog/964564 在工作學習中,我往往感嘆數學奇蹟般的解決一些貌似不可能完成的任務,並且十分希望將這種喜悅分享給大家,就好比說:“老婆,出來看上帝”…… 隨著資訊爆炸時代的來臨,網際網路上充斥著著大量的
遞迴去重的演算法
#coding:utf8 import random # 遞迴 def getNoRepeatNum(havenum): num = random.randint(1,10) if num in havenum: num = getNoRepeatNum(h
js實現常見的幾種演算法(陣列去重、字元統計、二分查詢等)
1、陣列去重:利用物件屬性進行篩選 function filter(arr){ let obj={}; let newArr=[]; for (let i=0;i<arr.