結果
問題 | No.300 平方数 |
ユーザー |
![]() |
提出日時 | 2017-07-22 18:43:02 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 17 ms / 1,000 ms |
コード長 | 789 bytes |
コンパイル時間 | 1,388 ms |
コンパイル使用メモリ | 157,400 KB |
実行使用メモリ | 7,680 KB |
最終ジャッジ日時 | 2024-10-09 10:00:10 |
合計ジャッジ時間 | 3,472 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
コンパイルメッセージ
main.cpp:11:1: warning: ISO C++ forbids declaration of ‘main’ with no type [-Wreturn-type] 11 | main(){ | ^~~~ main.cpp: In function ‘int main()’: main.cpp:21:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 21 | scanf("%lld",&X); | ~~~~~^~~~~~~~~~~
ソースコード
#include<bits/stdc++.h> int prime[1000000]; int count[1000000]; long long pow(int x,int n){ long long ans = 1; for(int i = 0;i < n;i++){ ans *= x; } return ans; } main(){ prime[0] = 1; prime[1] = 1; for(int i = 2;i*i <= 1000000;i++){ if(prime[i])continue; for(int j = i*2;j <= 1000000;j+=i){ prime[j] = 1; } } long long X; scanf("%lld",&X); loop: for(int i = 2;i < 1000000;i++){ if(!prime[i] && X%i==0){ count[i]++; X/=i; goto loop;//1回も割れないときループを抜ける } } long long sum = 1; for(int i = 2;i < 1000000;i++){ sum *= pow(i,count[i]%2); } printf("%lld\n",sum*X); }